From d67017280131e8d71dbb57daa853b56f95ccfc13 Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Fri, 24 Jul 2020 20:34:32 +0200 Subject: More cleanup, added alias cmap_get <-> cmap_find. --- stc/cbitset.h | 51 ++++++++++++++++++++++++++++++++++----------------- stc/cmap.h | 3 +++ stc/cstr.h | 13 ++++++------- 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/stc/cbitset.h b/stc/cbitset.h index 6f7c9c9b..7f2c2c39 100644 --- a/stc/cbitset.h +++ b/stc/cbitset.h @@ -52,6 +52,8 @@ 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_INLINE void cbitset_setAll(CBitset *self, bool value); STC_INLINE CBitset cbitset_make(size_t size, bool value) { @@ -68,25 +70,23 @@ STC_INLINE void cbitset_destroy(CBitset* self) { free(self->_arr); } -STC_INLINE void cbitset_resize(CBitset* self, size_t size, bool value) { - size_t new_n = (size + 63) >> 6, osize = self->size, old_n = (osize + 63) >> 6; - self->_arr = (uint64_t *) realloc(self->_arr, new_n * 8); - self->size = size; - if (new_n >= old_n) { - memset(self->_arr + old_n, value ? 0xff : 0x0, (new_n - old_n) * 8); - if (old_n > 0) { - uint64_t mask = (1ull << (osize & 63)) - 1; - value ? (self->_arr[old_n - 1] |= ~mask) : (self->_arr[old_n - 1] &= mask); - } - } -} STC_INLINE size_t cbitset_size(CBitset set) {return set.size;} -STC_INLINE void cbitset_set(CBitset *self, size_t i) {self->_arr[i >> 6] |= 1ull << (i & 63);} -STC_INLINE void cbitset_reset(CBitset *self, size_t i) {self->_arr[i >> 6] &= ~(1ull << (i & 63));} -STC_INLINE void cbitset_setTo(CBitset *self, size_t i, bool value) {value ? cbitset_set(self, i) : cbitset_reset(self, i);} -STC_INLINE void cbitset_flip(CBitset *self, size_t i) {self->_arr[i >> 6] ^= 1ull << (i & 63);} -STC_INLINE bool cbitset_test(CBitset set, size_t i) {return (set._arr[i >> 6] & (1ull << (i & 63))) != 0;} +STC_INLINE void cbitset_set(CBitset *self, size_t i) { + self->_arr[i >> 6] |= 1ull << (i & 63); +} +STC_INLINE void cbitset_reset(CBitset *self, size_t i) { + self->_arr[i >> 6] &= ~(1ull << (i & 63)); +} +STC_INLINE void cbitset_setTo(CBitset *self, size_t i, bool value) { + value ? cbitset_set(self, i) : cbitset_reset(self, i); +} +STC_INLINE void cbitset_flip(CBitset *self, size_t i) { + self->_arr[i >> 6] ^= 1ull << (i & 63); +} +STC_INLINE bool cbitset_test(CBitset set, size_t i) { + return (set._arr[i >> 6] & (1ull << (i & 63))) != 0; +} STC_INLINE void cbitset_setAll(CBitset *self, bool value) { memset(self->_arr, value ? 0xff : 0x0, ((self->size + 63) >> 6) * 8); @@ -135,4 +135,21 @@ STC_INLINE CBitset cbitset_not(CBitset s1) { cbitset_flipAll(&set); return set; } +#if !defined(STC_HEADER) || defined(STC_IMPLEMENTATION) + +STC_API void cbitset_resize(CBitset* self, size_t size, bool value) { + size_t new_n = (size + 63) >> 6, osize = self->size, old_n = (osize + 63) >> 6; + self->_arr = (uint64_t *) realloc(self->_arr, new_n * 8); + self->size = size; + if (new_n >= old_n) { + memset(self->_arr + old_n, value ? 0xff : 0x0, (new_n - old_n) * 8); + if (old_n > 0) { + uint64_t mask = (1ull << (osize & 63)) - 1; + value ? (self->_arr[old_n - 1] |= ~mask) : (self->_arr[old_n - 1] &= mask); + } + } +} + +#endif + #endif diff --git a/stc/cmap.h b/stc/cmap.h index 1ac10ff1..64cc90a0 100644 --- a/stc/cmap.h +++ b/stc/cmap.h @@ -173,6 +173,9 @@ ctype##_##tag##_setLoadFactors(CType##_##tag* self, float max, float shrink) { \ } \ STC_API CType##Entry_##tag* \ ctype##_##tag##_find(const CType##_##tag* self, CType##RawKey_##tag rawKey); \ +STC_FORCE_INLINE CType##Entry_##tag* \ +ctype##_##tag##_get(const CType##_##tag* self, CType##RawKey_##tag rawKey) \ + {return ctype##_##tag##_find(self, rawKey);} /* alias */ \ STC_API CType##Entry_##tag* /* similar to c++ std::map.insert_or_assign(): */ \ ctype##_##tag##_put(CType##_##tag* self, OPT_2_##ctype(CType##RawKey_##tag rawKey, Value value)); \ OPT_1_##ctype(STC_API CType##Entry_##tag* /* similar to c++ std::map.operator[](): */ \ diff --git a/stc/cstr.h b/stc/cstr.h index cea583a5..4cb1fe60 100644 --- a/stc/cstr.h +++ b/stc/cstr.h @@ -36,9 +36,9 @@ typedef struct CStr { } CStr; static size_t _cstr_nullrep[] = {0, 0, 0}; -#define _cstr_rep(self) (((size_t *) (self)->str) - 2) -#define _cstr_size(s) ((size_t *) (s).str)[-2] -#define _cstr_mem(cap) (sizeof(size_t) * (3 + (cap)/sizeof(size_t))) +#define _cstr_rep(self) (((size_t *) (self)->str) - 2) +#define _cstr_size(s) ((size_t *) (s).str)[-2] +#define _cstr_mem(cap) (sizeof(size_t) * (3 + (cap)/sizeof(size_t))) #define cstr_size(s) ((const size_t *) (s).str)[-2] #define cstr_capacity(s) ((const size_t *) (s).str)[-1] @@ -185,12 +185,11 @@ cstr_find(CStr s, size_t pos, const char* needle) { return res ? res - s.str : cstr_npos; } - /* CVec / CMap API functions: */ -#define cstr_getRaw(x) ((x)->str) -#define cstr_compareRaw(x, y) strcmp(*(x), *(y)) -#define cstr_equalsRaw(x, y) (strcmp(*(x), *(y)) == 0) +#define cstr_getRaw(x) ((x)->str) +#define cstr_compareRaw(x, y) strcmp(*(x), *(y)) +#define cstr_equalsRaw(x, y) (strcmp(*(x), *(y)) == 0) STC_INLINE uint32_t cstr_hashRaw(const char* const* sPtr, size_t ignored) { return c_defaultHash(*sPtr, strlen(*sPtr)); } -- cgit v1.2.3