diff options
| author | Tyge Løvset <[email protected]> | 2020-07-24 20:34:32 +0200 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2020-07-24 20:34:32 +0200 |
| commit | d67017280131e8d71dbb57daa853b56f95ccfc13 (patch) | |
| tree | c883192033b5cea41fe95ef5a10b27c4c18a16e4 | |
| parent | 3d8f34c860095d6a19bcaaa0962bccae7369fd82 (diff) | |
| download | STC-modified-d67017280131e8d71dbb57daa853b56f95ccfc13.tar.gz STC-modified-d67017280131e8d71dbb57daa853b56f95ccfc13.zip | |
More cleanup, added alias cmap_get <-> cmap_find.
| -rw-r--r-- | stc/cbitset.h | 51 | ||||
| -rw-r--r-- | stc/cmap.h | 3 | ||||
| -rw-r--r-- | 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
@@ -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[](): */ \
@@ -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));
}
|
