2 * This file is part of Cleanflight and Betaflight.
4 * Cleanflight and Betaflight are free software. You can redistribute
5 * this software and/or modify this software under the terms of the
6 * GNU General Public License as published by the Free Software
7 * Foundation, either version 3 of the License, or (at your option)
10 * Cleanflight and Betaflight are distributed in the hope that they
11 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
12 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 * See the GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this software.
18 * If not, see <http://www.gnu.org/licenses/>.
29 #define BITARRAY_BIT_OP(array, bit, op) ((array)[(bit) / (sizeof((array)[0]) * 8)] op (1 << ((bit) % (sizeof((array)[0]) * 8))))
31 bool bitArrayGet(const void *array
, unsigned bit
)
33 return BITARRAY_BIT_OP((uint32_t*)array
, bit
, &);
36 void bitArraySet(void *array
, unsigned bit
)
38 BITARRAY_BIT_OP((uint32_t*)array
, bit
, |=);
41 void bitArrayClr(void *array
, unsigned bit
)
43 BITARRAY_BIT_OP((uint32_t*)array
, bit
, &=~);
46 void bitArrayXor(void *dest
, size_t size
, void *op1
, void *op2
)
48 for (size_t i
= 0; i
< size
; i
++) {
49 ((uint8_t*)dest
)[i
] = ((uint8_t*)op1
)[i
] ^ ((uint8_t*)op2
)[i
];
53 void bitArrayCopy(void *array
, unsigned from
, unsigned to
)
55 if (bitArrayGet(array
, from
)) {
56 bitArraySet(array
, to
);
58 bitArrayClr(array
, to
);