From de216de5b32da73ce835d2a3d03b4dd44bfeaf6d Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Wed, 16 Jun 2021 23:23:07 +0200 Subject: A fix in cstr_icontains() and some minor improvements --- include/stc/cmap.h | 2 +- include/stc/csmap.h | 2 +- include/stc/cstr.h | 8 ++++---- include/stc/cvec.h | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) (limited to 'include') 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)); \ -- cgit v1.2.3