AP_Common: Bitmask: add assignment operator

This commit is contained in:
Peter Barker 2018-11-03 08:43:08 +11:00 committed by Randy Mackay
parent 942555ceb8
commit db5f933e7a
2 changed files with 30 additions and 3 deletions

View File

@ -0,0 +1,27 @@
#include "Bitmask.h"
#include <AP_HAL/AP_HAL.h>
Bitmask &Bitmask::operator=(const Bitmask&other)
{
if (other.numwords != numwords || other.numbits != numbits) {
#if CONFIG_HAL_BOARD == HAL_BOARD_SITL
// we really should not be assigning from a bitmask of a
// different number of bits!
AP_HAL::panic("attempt to copy from bitmask of different size");
#endif
// ... but try to cope if it happens in real life:
if (numwords != other.numwords) {
delete bits;
bits = new uint32_t[numwords];
numwords = other.numwords;
}
numbits = other.numbits;
}
if (other.numwords > 20) {
abort();
}
memcpy(bits, other.bits, 4*other.numwords);
return *this;
}

View File

@ -33,7 +33,7 @@ public:
delete[] bits;
}
Bitmask &operator=(const Bitmask&other) = delete;
Bitmask &operator=(const Bitmask&other);
Bitmask(const Bitmask &other) = delete;
// set given bitnumber
@ -119,7 +119,7 @@ public:
}
private:
const uint16_t numbits;
const uint16_t numwords;
uint16_t numbits;
uint16_t numwords;
uint32_t *bits;
};