summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--docs/cvec_api.md2
-rw-r--r--include/stc/cvec.h10
2 files changed, 7 insertions, 5 deletions
diff --git a/docs/cvec_api.md b/docs/cvec_api.md
index 7aef79d9..c1d46f6d 100644
--- a/docs/cvec_api.md
+++ b/docs/cvec_api.md
@@ -53,7 +53,7 @@ cvec_X_iter cvec_X_find_in(cvec_X_iter i1, cvec_X_iter i2, i_valraw raw)
// On sorted vectors:
cvec_X_iter cvec_X_bsearch(const cvec_X* self, i_valraw raw); // at elem == raw, else end
cvec_X_iter cvec_X_lower_bound(const cvec_X* self, i_valraw raw); // at first elem >= raw, else end
-cvec_X_iter cvec_X_bsearch_in(cvec_X_iter i1, cvec_X_iter i2, i_valraw raw, cvec_X_iter* lower_bound = NULL);
+cvec_X_iter cvec_X_bsearch_in(cvec_X_iter i1, cvec_X_iter i2, i_valraw raw, cvec_X_iter* lower_bound);
cvec_X_value* cvec_X_front(const cvec_X* self);
cvec_X_value* cvec_X_back(const cvec_X* self);
diff --git a/include/stc/cvec.h b/include/stc/cvec.h
index 2b210519..1990b15d 100644
--- a/include/stc/cvec.h
+++ b/include/stc/cvec.h
@@ -218,8 +218,10 @@ _cx_memb(_get_mut)(const _cx_self* self, i_valraw raw)
{ return (_cx_value*) _cx_memb(_get)(self, raw); }
STC_INLINE _cx_iter
-_cx_memb(_bsearch)(const _cx_self* self, i_valraw raw)
- { return _cx_memb(_bsearch_in)(_cx_memb(_begin)(self), _cx_memb(_end)(self), raw, NULL); }
+_cx_memb(_bsearch)(const _cx_self* self, i_valraw raw) {
+ _cx_iter lower;
+ return _cx_memb(_bsearch_in)(_cx_memb(_begin)(self), _cx_memb(_end)(self), raw, &lower);
+}
STC_INLINE _cx_iter
_cx_memb(_lower_bound)(const _cx_self* self, i_valraw raw) {
@@ -386,11 +388,11 @@ _cx_memb(_bsearch_in)(_cx_iter i1, _cx_iter i2, i_valraw raw, _cx_iter* lower_bo
while (i1.ref != i2.ref) {
mid.ref = i1.ref + ((i2.ref - i1.ref) >> 1);
int c; i_valraw m = i_valto(mid.ref);
- if ((c = i_cmp(&raw, &m)) == 0) return mid;
+ if ((c = i_cmp(&raw, &m)) == 0) return *lower_bound = mid;
else if (c < 0) i2.ref = mid.ref;
else i1.ref = mid.ref + 1;
}
- if (lower_bound) *lower_bound = i1;
+ *lower_bound = i1;
return last;
}