diff options
| author | Tyge Løvset <[email protected]> | 2020-07-26 18:45:55 +0200 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2020-07-26 18:45:55 +0200 |
| commit | c7dfeeed29804c7a51a5c278ecc460cdc173f828 (patch) | |
| tree | 0b99236db4a03b52ad5393e6a33ec3c248f81bb9 | |
| parent | 39311349032d9f3d5a1fbb06b326ba58efca2e10 (diff) | |
| download | STC-modified-c7dfeeed29804c7a51a5c278ecc460cdc173f828.tar.gz STC-modified-c7dfeeed29804c7a51a5c278ecc460cdc173f828.zip | |
cbitset.h
| -rw-r--r-- | stc/cbitset.h | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/stc/cbitset.h b/stc/cbitset.h index c6311080..4f30c091 100644 --- a/stc/cbitset.h +++ b/stc/cbitset.h @@ -60,6 +60,7 @@ typedef struct { uint64_t* _arr; size_t size; } CBitset; #define cbitset_init {NULL, 0}
STC_API void cbitset_resize(CBitset* self, size_t size, bool value);
+STC_API size_t cbitset_count(CBitset set);
STC_INLINE void cbitset_setAll(CBitset *self, bool value);
@@ -94,14 +95,6 @@ STC_INLINE void cbitset_flip(CBitset *self, size_t i) { STC_INLINE bool cbitset_test(CBitset set, size_t i) {
return (set._arr[i >> 6] & (1ull << (i & 63))) != 0;
}
-STC_INLINE size_t cbitset_count(CBitset set) {
- size_t count = 0, n = (set.size + 63) >> 6;
- if (set.size > 0) {
- --n; for (size_t i=0; i<n; ++i) count += cbitset_popcnt64(set._arr[i]);
- count += cbitset_popcnt64(set._arr[n] & ((1ull << (set.size & 63)) - 1));
- }
- return count;
-}
STC_INLINE void cbitset_setAll(CBitset *self, bool value) {
memset(self->_arr, value ? 0xff : 0x0, ((self->size + 63) >> 6) * 8);
@@ -165,6 +158,15 @@ STC_API void cbitset_resize(CBitset* self, size_t size, bool value) { }
}
+STC_API size_t cbitset_count(CBitset set) {
+ size_t count = 0, n = (set.size + 63) >> 6;
+ if (set.size > 0) {
+ --n; for (size_t i=0; i<n; ++i) count += cbitset_popcnt64(set._arr[i]);
+ count += cbitset_popcnt64(set._arr[n] & ((1ull << (set.size & 63)) - 1));
+ }
+ return count;
+}
+
#endif
#endif
|
