diff options
| author | Tyge Løvset <[email protected]> | 2022-08-11 14:36:40 +0200 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2022-08-11 14:36:40 +0200 |
| commit | 9831e8d6ee6772a4f9899cf9e3d36e3de47bbaf5 (patch) | |
| tree | 73702c9a98939f8a7e7b3151c39e8bdda67832a7 /include | |
| parent | 989253176e8359280ffbfff546c382d559e66b27 (diff) | |
| download | STC-modified-9831e8d6ee6772a4f9899cf9e3d36e3de47bbaf5.tar.gz STC-modified-9831e8d6ee6772a4f9899cf9e3d36e3de47bbaf5.zip | |
Completed support for i_less().
Diffstat (limited to 'include')
| -rw-r--r-- | include/stc/cpque.h | 12 | ||||
| -rw-r--r-- | include/stc/template.h | 5 |
2 files changed, 10 insertions, 7 deletions
diff --git a/include/stc/cpque.h b/include/stc/cpque.h index bb7c207e..79d12b95 100644 --- a/include/stc/cpque.h +++ b/include/stc/cpque.h @@ -110,9 +110,9 @@ STC_INLINE void _cx_memb(_emplace)(_cx_self* self, _cx_raw raw) STC_DEF void _cx_memb(_sift_down_)(_cx_value* arr, const size_t idx, const size_t n) { - for (size_t r = idx, c = idx << 1; c <= n; c <<= 1) { - c += (c < n && (i_cmp((&arr[c]), (&arr[c + 1]))) < 0); - if ((i_cmp((&arr[r]), (&arr[c]))) >= 0) return; + for (size_t r = idx, c = idx*2; c <= n; c *= 2) { + c += (c < n && (i_less((&arr[c]), (&arr[c + 1])))); + if (!(i_less((&arr[r]), (&arr[c])))) return; _cx_value t = arr[r]; arr[r] = arr[c]; arr[r = c] = t; } } @@ -121,7 +121,7 @@ STC_DEF void _cx_memb(_make_heap)(_cx_self* self) { size_t n = self->size; _cx_value *arr = self->data - 1; - for (size_t k = n >> 1; k != 0; --k) + for (size_t k = n/2; k != 0; --k) _cx_memb(_sift_down_)(arr, k, n); } @@ -148,8 +148,8 @@ _cx_memb(_push)(_cx_self* self, _cx_value value) { _cx_memb(_reserve)(self, self->size*3/2 + 4); _cx_value *arr = self->data - 1; /* base 1 */ size_t c = ++self->size; - for (; c > 1 && (i_cmp((&arr[c >> 1]), (&value))) < 0; c >>= 1) - arr[c] = arr[c >> 1]; + for (; c > 1 && (i_less((&arr[c/2]), (&value))); c /= 2) + arr[c] = arr[c/2]; arr[c] = value; } diff --git a/include/stc/template.h b/include/stc/template.h index cb0c7ef2..ac9d5b5e 100644 --- a/include/stc/template.h +++ b/include/stc/template.h @@ -167,7 +167,7 @@ #define i_keydrop c_default_drop #endif -// i_eq, i_less, i_cmp, i_hash +// i_eq, i_less, i_cmp #if !defined i_eq && (defined i_cmp || defined i_less) #define i_eq(x, y) !(i_cmp(x, y)) #elif !defined i_eq @@ -175,10 +175,13 @@ #endif #if !defined i_less && !defined i_cmp #define i_less c_default_less +#elif !defined i_less + #define i_less(x, y) (i_cmp(x, y)) < 0 #endif #ifndef i_cmp #define i_cmp(x, y) (i_less(y, x)) - (i_less(x, y)) #endif + #ifndef i_hash #define i_hash c_default_hash #endif |
