diff --git a/libraries/AP_Common/Bitmask.cpp b/libraries/AP_Common/Bitmask.cpp new file mode 100644 index 0000000000..9d0806cd40 --- /dev/null +++ b/libraries/AP_Common/Bitmask.cpp @@ -0,0 +1,27 @@ +#include "Bitmask.h" + +#include + +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; +} diff --git a/libraries/AP_Common/Bitmask.h b/libraries/AP_Common/Bitmask.h index 09e575a2ab..856257d468 100644 --- a/libraries/AP_Common/Bitmask.h +++ b/libraries/AP_Common/Bitmask.h @@ -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; };