summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2020-07-24 20:34:32 +0200
committerTyge Løvset <[email protected]>2020-07-24 20:34:32 +0200
commitd67017280131e8d71dbb57daa853b56f95ccfc13 (patch)
treec883192033b5cea41fe95ef5a10b27c4c18a16e4
parent3d8f34c860095d6a19bcaaa0962bccae7369fd82 (diff)
downloadSTC-modified-d67017280131e8d71dbb57daa853b56f95ccfc13.tar.gz
STC-modified-d67017280131e8d71dbb57daa853b56f95ccfc13.zip
More cleanup, added alias cmap_get <-> cmap_find.
-rw-r--r--stc/cbitset.h51
-rw-r--r--stc/cmap.h3
-rw-r--r--stc/cstr.h13
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));
}