[bit-utils] un-inline CountBitsInMask helper method (#13286)

This commit replaces the template function `CountBitsInMask<UintType>`
with a non-template function `CountBitsInMask(uint32_t)` in `bit_utils.hpp`
and moves its implementation to `bit_utils.cpp`.

Un-inlining this helper function avoids template instantiation overhead
and reduces binary size across translation units. Small integer arguments
(`uint8_t`, `uint16_t`) automatically promote to `uint32_t`, preserving
existing functionality.
This commit is contained in:
Abtin Keshavarzian
2026-07-03 21:00:06 -07:00
committed by GitHub
parent e4930db19d
commit ef9c8de3cd
3 changed files with 36 additions and 33 deletions
+21 -16
View File
@@ -37,23 +37,28 @@ namespace ot {
void TestCountBitsInMask(void)
{
VerifyOrQuit(CountBitsInMask<uint8_t>(0) == 0);
VerifyOrQuit(CountBitsInMask<uint8_t>(1) == 1);
VerifyOrQuit(CountBitsInMask<uint8_t>(2) == 1);
VerifyOrQuit(CountBitsInMask<uint8_t>(3) == 2);
VerifyOrQuit(CountBitsInMask<uint8_t>(4) == 1);
VerifyOrQuit(CountBitsInMask<uint8_t>(7) == 3);
VerifyOrQuit(CountBitsInMask<uint8_t>(11) == 3);
VerifyOrQuit(CountBitsInMask<uint8_t>(15) == 4);
VerifyOrQuit(CountBitsInMask<uint8_t>(0x11) == 2);
VerifyOrQuit(CountBitsInMask<uint8_t>(0xef) == 7);
VerifyOrQuit(CountBitsInMask<uint8_t>(0xff) == 8);
VerifyOrQuit(CountBitsInMask(0) == 0);
VerifyOrQuit(CountBitsInMask(1) == 1);
VerifyOrQuit(CountBitsInMask(2) == 1);
VerifyOrQuit(CountBitsInMask(3) == 2);
VerifyOrQuit(CountBitsInMask(4) == 1);
VerifyOrQuit(CountBitsInMask(7) == 3);
VerifyOrQuit(CountBitsInMask(11) == 3);
VerifyOrQuit(CountBitsInMask(15) == 4);
VerifyOrQuit(CountBitsInMask(0x11) == 2);
VerifyOrQuit(CountBitsInMask(0xef) == 7);
VerifyOrQuit(CountBitsInMask(0xff) == 8);
VerifyOrQuit(CountBitsInMask<uint16_t>(0) == 0);
VerifyOrQuit(CountBitsInMask<uint16_t>(0xff00) == 8);
VerifyOrQuit(CountBitsInMask<uint16_t>(0xff) == 8);
VerifyOrQuit(CountBitsInMask<uint16_t>(0xaa55) == 8);
VerifyOrQuit(CountBitsInMask<uint16_t>(0xffff) == 16);
VerifyOrQuit(CountBitsInMask(0xff00) == 8);
VerifyOrQuit(CountBitsInMask(0xaa55) == 8);
VerifyOrQuit(CountBitsInMask(0xffff) == 16);
VerifyOrQuit(CountBitsInMask(0x10000) == 1);
VerifyOrQuit(CountBitsInMask(0xff0055) == 12);
VerifyOrQuit(CountBitsInMask(0xaa0055) == 8);
VerifyOrQuit(CountBitsInMask(0xaa007700) == 10);
VerifyOrQuit(CountBitsInMask(0xffff0000) == 16);
VerifyOrQuit(CountBitsInMask(0xffffffff) == 32);
printf("TestCountBitsInMask() passed\n");
}