From 6adad11e2f780ff50189258c4b6c98ebd068032a Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 17 Nov 2016 18:19:05 +1100 Subject: [PATCH] AP_Common: added simple bitmask class --- libraries/AP_Common/Bitmask.h | 70 +++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 libraries/AP_Common/Bitmask.h diff --git a/libraries/AP_Common/Bitmask.h b/libraries/AP_Common/Bitmask.h new file mode 100644 index 0000000000..61b1d0df34 --- /dev/null +++ b/libraries/AP_Common/Bitmask.h @@ -0,0 +1,70 @@ +/* + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ +/* + simple bitmask class + */ + +class Bitmask { +public: + Bitmask(uint16_t numbits) : + numwords((numbits+31)/32) { + bits = new uint32_t[numwords]; + } + ~Bitmask(void) { + delete[] bits; + } + + // set given bitnumber + void set(uint16_t bit) { + uint16_t word = bit/32; + uint8_t ofs = bit & 0x1f; + bits[word] |= (1U << ofs); + } + + // clear given bitnumber + void clear(uint16_t bit) { + uint16_t word = bit/32; + uint8_t ofs = bit & 0x1f; + bits[word] &= ~(1U << ofs); + } + + // clear all bits + void clearall(void) { + for (uint16_t i=0; i