Line data Source code
1 : // Copyright 2024 Accenture. 2 : 3 : #include "can/filter/BitFieldFilter.h" 4 : 5 : namespace can 6 : { 7 : #ifdef __GNUC__ 8 : uint16_t const BitFieldFilter::NUMBER_OF_BITS; 9 : uint16_t const BitFieldFilter::MAX_ID; 10 : uint16_t const BitFieldFilter::MASK_SIZE; 11 : #endif 12 : 13 77 : BitFieldFilter::BitFieldFilter() { BitFieldFilter::clear(); } 14 : 15 : // virtual 16 10693 : void BitFieldFilter::add(uint32_t const filterId) 17 : { 18 10693 : if (filterId <= MAX_ID) 19 : { 20 10691 : uint16_t const idx = static_cast<uint16_t>(filterId / 8U); 21 : 22 10691 : _mask[idx] 23 10691 : = static_cast<uint8_t>((_mask[idx] | static_cast<uint8_t>(1U << (filterId % 8U)))); 24 : } 25 10693 : } 26 : 27 : // virtual 28 6 : void BitFieldFilter::add(uint32_t const from, uint32_t const to) 29 : { 30 10555 : for (uint32_t i = from; i <= to; ++i) 31 : { 32 10549 : add(i); 33 : } 34 6 : } 35 : 36 : // virtual 37 14890 : bool BitFieldFilter::match(uint32_t const filterId) const 38 : { 39 14890 : if (filterId <= MAX_ID) 40 : { 41 14884 : uint16_t const idx = static_cast<uint16_t>(filterId / 8U); 42 : 43 14884 : uint16_t const maskIndex = static_cast<uint16_t>(1U) << (filterId % 8U); 44 14884 : return (static_cast<uint16_t>(_mask[idx]) & maskIndex) == maskIndex; 45 : } 46 : return false; 47 : } 48 : 49 : } // namespace can