summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2021-06-16 23:23:07 +0200
committerTyge Løvset <[email protected]>2021-06-16 23:23:07 +0200
commitde216de5b32da73ce835d2a3d03b4dd44bfeaf6d (patch)
tree6c374285bb7fa8934bf8cb5e945dc7b342b2293e /include
parente8938b55964df7b1f051263796ddafa7ae94ee77 (diff)
downloadSTC-modified-de216de5b32da73ce835d2a3d03b4dd44bfeaf6d.tar.gz
STC-modified-de216de5b32da73ce835d2a3d03b4dd44bfeaf6d.zip
A fix in cstr_icontains() and some minor improvements
Diffstat (limited to 'include')
-rw-r--r--include/stc/cmap.h2
-rw-r--r--include/stc/csmap.h2
-rw-r--r--include/stc/cstr.h8
-rw-r--r--include/stc/cvec.h4
4 files changed, 8 insertions, 8 deletions
diff --git a/include/stc/cmap.h b/include/stc/cmap.h
index e66bd526..737e0dab 100644
--- a/include/stc/cmap.h
+++ b/include/stc/cmap.h
@@ -383,7 +383,7 @@ STC_INLINE size_t fastrange_uint64_t(uint64_t x, uint64_t n) \
STC_DEF CX##_result_t \
CX##_insert_entry_(CX* self, RawKey rkey) { \
if (self->size + 1 >= (CX##_size_t) (self->bucket_count * self->max_load_factor)) \
- CX##_reserve(self, 8 + self->size * 3 / 2); \
+ CX##_reserve(self, 8 + (self->size*13ull >> 3)); \
chash_bucket_t b = CX##_bucket_(self, &rkey); \
CX##_result_t res = {&self->table[b.idx], !self->_hashx[b.idx]}; \
if (res.inserted) { \
diff --git a/include/stc/csmap.h b/include/stc/csmap.h
index d00ebd84..b61af839 100644
--- a/include/stc/csmap.h
+++ b/include/stc/csmap.h
@@ -362,7 +362,7 @@ static struct csmap_rep _csmap_sentinel = {0, 0, 0, 0, 0};
tn = rep->disp; \
rep->disp = self->nodes[tn].link[1]; \
} else { \
- if ((tn = rep->head + 1) > rep->cap) CX##_reserve(self, 4 + tn*3/2); \
+ if ((tn = rep->head + 1) > rep->cap) CX##_reserve(self, 4 + (tn*13 >> 3)); \
++_csmap_rep(self)->head; /* do after reserve */ \
} \
CX##_node_t* dn = &self->nodes[tn]; \
diff --git a/include/stc/cstr.h b/include/stc/cstr.h
index a3387632..c81604c5 100644
--- a/include/stc/cstr.h
+++ b/include/stc/cstr.h
@@ -122,7 +122,7 @@ STC_INLINE bool cstr_iequals(cstr s, const char* str)
STC_INLINE bool cstr_contains(cstr s, const char* needle)
{ return strstr(s.str, needle) != NULL; }
STC_INLINE bool cstr_icontains(cstr s, const char* needle)
- { return c_strncasestrn(s.str, needle, cstr_size(s), cstr_npos) != NULL; }
+ { return c_strncasestrn(s.str, needle, cstr_size(s), strlen(needle)) != NULL; }
STC_INLINE bool cstr_getline(cstr *self, FILE *stream)
{ return cstr_getdelim(self, '\n', stream); }
@@ -284,7 +284,7 @@ cstr_append_n(cstr* self, const char* str, size_t n) {
size_t oldlen = _cstr_rep(self)->size, newlen = oldlen + n;
if (newlen > _cstr_rep(self)->cap) {
size_t off = (size_t) (str - self->str); /* handle self append */
- cstr_reserve(self, newlen*3 >> 1);
+ cstr_reserve(self, (oldlen*13 >> 3) + n);
if (off <= oldlen) str = self->str + off;
}
memcpy(&self->str[oldlen], str, n);
@@ -297,7 +297,7 @@ STC_INLINE void _cstr_internal_move(cstr* self, size_t pos1, size_t pos2) {
return;
size_t len = _cstr_rep(self)->size, newlen = len + pos2 - pos1;
if (newlen > _cstr_rep(self)->cap)
- cstr_reserve(self, newlen*3 >> 1);
+ cstr_reserve(self, (len*13 >> 3) + pos2 - pos1);
memmove(&self->str[pos2], &self->str[pos1], len - pos1);
self->str[_cstr_rep(self)->size = newlen] = '\0';
}
@@ -349,7 +349,7 @@ cstr_getdelim(cstr *self, int delim, FILE *fp) {
return false;
for (;;) {
if (pos == cap)
- cap = cstr_reserve(self, (cap*3 >> 1) + 24);
+ cap = cstr_reserve(self, (cap*13 >> 3) + 16);
if (c == delim || c == EOF) {
self->str[_cstr_rep(self)->size = pos] = '\0';
return true;
diff --git a/include/stc/cvec.h b/include/stc/cvec.h
index ed94e785..75a8008b 100644
--- a/include/stc/cvec.h
+++ b/include/stc/cvec.h
@@ -261,7 +261,7 @@ static struct cvec_rep _cvec_sentinel = {0, 0};
CX##_push_back(CX* self, Value value) { \
size_t len = _cvec_rep(self)->size; \
if (len == CX##_capacity(*self)) \
- CX##_reserve(self, 4 + len*1.5); \
+ CX##_reserve(self, (len*13 >> 3) + 4); \
self->data[_cvec_rep(self)->size++] = value; \
} \
\
@@ -278,7 +278,7 @@ static struct cvec_rep _cvec_sentinel = {0, 0};
size_t idx = pos - self->data, size = _cvec_rep(self)->size; \
if (len == 0) return pos; \
if (size + len > CX##_capacity(*self)) \
- CX##_reserve(self, 4 + (size + len)*1.5), \
+ CX##_reserve(self, (size*13 >> 3) + len), \
pos = self->data + idx; \
_cvec_rep(self)->size += len; \
memmove(pos + len, pos, (size - idx) * sizeof(Value)); \