summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2020-07-26 18:45:55 +0200
committerTyge Løvset <[email protected]>2020-07-26 18:45:55 +0200
commitc7dfeeed29804c7a51a5c278ecc460cdc173f828 (patch)
tree0b99236db4a03b52ad5393e6a33ec3c248f81bb9
parent39311349032d9f3d5a1fbb06b326ba58efca2e10 (diff)
downloadSTC-modified-c7dfeeed29804c7a51a5c278ecc460cdc173f828.tar.gz
STC-modified-c7dfeeed29804c7a51a5c278ecc460cdc173f828.zip
cbitset.h
-rw-r--r--stc/cbitset.h18
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