summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2022-08-11 14:36:40 +0200
committerTyge Løvset <[email protected]>2022-08-11 14:36:40 +0200
commit9831e8d6ee6772a4f9899cf9e3d36e3de47bbaf5 (patch)
tree73702c9a98939f8a7e7b3151c39e8bdda67832a7 /include
parent989253176e8359280ffbfff546c382d559e66b27 (diff)
downloadSTC-modified-9831e8d6ee6772a4f9899cf9e3d36e3de47bbaf5.tar.gz
STC-modified-9831e8d6ee6772a4f9899cf9e3d36e3de47bbaf5.zip
Completed support for i_less().
Diffstat (limited to 'include')
-rw-r--r--include/stc/cpque.h12
-rw-r--r--include/stc/template.h5
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