summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--benchmarks/others/clist_v1.h4
-rw-r--r--benchmarks/others/csmap_v1.h2
-rw-r--r--docs/cdeq_api.md17
-rw-r--r--docs/clist_api.md2
-rw-r--r--docs/cmap_api.md2
-rw-r--r--docs/cpque_api.md2
-rw-r--r--docs/cqueue_api.md2
-rw-r--r--docs/cset_api.md2
-rw-r--r--docs/csmap_api.md2
-rw-r--r--docs/csset_api.md2
-rw-r--r--docs/cstack_api.md2
-rw-r--r--docs/cvec_api.md20
-rw-r--r--examples/cpque.c2
-rw-r--r--stc/ccommon.h6
-rw-r--r--stc/cdeq.h99
-rw-r--r--stc/clist.h4
-rw-r--r--stc/cmap.h2
-rw-r--r--stc/cpque.h4
-rw-r--r--stc/cqueue.h4
-rw-r--r--stc/csmap.h2
-rw-r--r--stc/cstack.h4
-rw-r--r--stc/cvec.h34
22 files changed, 111 insertions, 109 deletions
diff --git a/benchmarks/others/clist_v1.h b/benchmarks/others/clist_v1.h
index 0887d5b3..0c438ad0 100644
--- a/benchmarks/others/clist_v1.h
+++ b/benchmarks/others/clist_v1.h
@@ -104,7 +104,7 @@ STC_API size_t _clist_count(const clist_VOID* self);
STC_API void CX##_del(CX* self); \
STC_API void CX##_push_back(CX* self, Value value); \
STC_API void CX##_push_front(CX* self, Value value); \
- STC_API void CX##_emplace_n(CX *self, const CX##_rawvalue_t arr[], size_t n); \
+ STC_API void CX##_emplace_items(CX *self, const CX##_rawvalue_t arr[], size_t n); \
STC_API CX CX##_split_after(CX* self, CX##_iter_t pos1, CX##_iter_t pos2); \
STC_API void CX##_splice_after(CX* self, CX##_iter_t pos, CX* other); \
STC_DEF void CX##_splice_after_range(CX* self, CX##_iter_t pos, CX* other, CX##_iter_t i1, CX##_iter_t i2); \
@@ -210,7 +210,7 @@ STC_API size_t _clist_count(const clist_VOID* self);
} \
\
STC_DEF void \
- CX##_emplace_n(CX *self, const CX##_rawvalue_t arr[], size_t n) { \
+ CX##_emplace_items(CX *self, const CX##_rawvalue_t arr[], size_t n) { \
for (size_t i=0; i<n; ++i) CX##_push_back(self, valueFromRaw(arr[i])); \
} \
\
diff --git a/benchmarks/others/csmap_v1.h b/benchmarks/others/csmap_v1.h
index 1d65b516..f93ff1cd 100644
--- a/benchmarks/others/csmap_v1.h
+++ b/benchmarks/others/csmap_v1.h
@@ -201,7 +201,7 @@ int main(void) {
} \
\
STC_INLINE void \
- CX##_emplace_n(CX* self, const CX##_rawvalue_t arr[], size_t n) { \
+ CX##_emplace_items(CX* self, const CX##_rawvalue_t arr[], size_t n) { \
for (size_t i=0; i<n; ++i) SET_ONLY_##C( CX##_emplace(self, arr[i]); ) \
MAP_ONLY_##C( CX##_emplace(self, arr[i].first, arr[i].second); ) \
} \
diff --git a/docs/cdeq_api.md b/docs/cdeq_api.md
index 880a9793..49cae7b7 100644
--- a/docs/cdeq_api.md
+++ b/docs/cdeq_api.md
@@ -56,18 +56,18 @@ void cdeq_X_push_back(cdeq_X* self, Value value);
void cdeq_X_emplace_back(cdeq_X* self, RawValue raw);
void cdeq_X_pop_back(cdeq_X* self);
-cdeq_X_iter_t cdeq_X_insert(cdeq_X* self, cdeq_X_iter_t it, Value value); // move value
-cdeq_X_iter_t cdeq_X_insert_at(cdeq_X* self, size_t idx, const Value[] arr, size_t n); // move arr values
+cdeq_X_iter_t cdeq_X_insert(cdeq_X* self, size_t idx, Value value); // move value
+cdeq_X_iter_t cdeq_X_insert_at(cdeq_X* self, cdeq_X_iter_t it, Value value); // move value
+cdeq_X_iter_t cdeq_X_insert_n(cdeq_X* self, size_t idx, const Value[] arr, size_t n); // move arr values
-cdeq_X_iter_t cdeq_X_emplace(cdeq_X* self, cdeq_X_iter_t it, RawValue raw);
-cdeq_X_iter_t cdeq_X_emplace_range(cdeq_X* self, cdeq_X_iter_t it,
- cdeq_X_iter_t i1, cdeq_X_iter_t i2); // note: does clone
-cdeq_X_iter_t cdeq_X_emplace_at(cdeq_X* self, size_t idx, const RawValue[] arr, size_t n);
-void cdeq_X_emplace_n(cdeq_X *self, const RawValue arr[], size_t n); // emplace_at back
+cdeq_X_iter_t cdeq_X_emplace(cdeq_X* self, size_t idx, RawValue raw);
+cdeq_X_iter_t cdeq_X_emplace_n(cdeq_X* self, size_t idx, const RawValue[] arr, size_t n);
+cdeq_X_iter_t cdeq_X_emplace_at(cdeq_X* self, cdeq_X_iter_t it, RawValue raw);
+cdeq_X_iter_t cdeq_X_emplace_range(cdeq_X* self, cdeq_X_iter_t it1, cdeq_X_iter_t it2); // will clone
+cdeq_X_iter_t cdeq_X_erase_n(cdeq_X* self, size_t idx, size_t n);
cdeq_X_iter_t cdeq_X_erase_at(cdeq_X* self, cdeq_X_iter_t it);
cdeq_X_iter_t cdeq_X_erase_range(cdeq_X* self, cdeq_X_iter_t it1, cdeq_X_iter_t it2);
-cdeq_X_iter_t cdeq_X_erase_n(cdeq_X* self, size_t idx, size_t n);
cdeq_X_iter_t cdeq_X_find(const cdeq_X* self, RawValue raw);
cdeq_X_iter_t cdeq_X_find_in(cdeq_X_iter_t i1, cdeq_X_iter_t i2, RawValue raw);
@@ -80,7 +80,6 @@ void cdeq_X_sort_range(cdeq_X_iter_t i1, cdeq_X_iter_t i2,
cdeq_X_iter_t cdeq_X_begin(const cdeq_X* self);
cdeq_X_iter_t cdeq_X_end(const cdeq_X* self);
void cdeq_X_next(cdeq_X_iter_t* it);
-size_t cdeq_X_index(const cdeq_X deq, cdeq_X_iter_t it);
cdeq_X_value_t cdeq_X_value_clone(cdeq_X_value_t val);
```
diff --git a/docs/clist_api.md b/docs/clist_api.md
index 09efb22e..27b87c23 100644
--- a/docs/clist_api.md
+++ b/docs/clist_api.md
@@ -62,7 +62,7 @@ void clist_X_pop_front(clist_X* self);
void clist_X_push_back(clist_X* self, Value value); // note: no pop_back().
void clist_X_emplace_back(clist_X* self, RawValue raw);
-void clist_X_emplace_n(clist_X *self, const clist_X_rawvalue_t arr[], size_t n);
+void clist_X_emplace_items(clist_X *self, const clist_X_rawvalue_t arr[], size_t n);
clist_X_iter_t clist_X_insert(clist_X* self, clist_X_iter_t it, Value value); // return iter to new elem
clist_X_iter_t clist_X_emplace(clist_X* self, clist_X_iter_t it, RawValue raw);
diff --git a/docs/cmap_api.md b/docs/cmap_api.md
index 99cee282..bac1a9b2 100644
--- a/docs/cmap_api.md
+++ b/docs/cmap_api.md
@@ -73,7 +73,7 @@ cmap_X_result_t cmap_X_put(cmap_X* self, Key key, Mapped mapped);
cmap_X_result_t cmap_X_emplace(cmap_X* self, RawKey rkey, RawMapped rmapped); // no change if rkey in map
cmap_X_result_t cmap_X_emplace_or_assign(cmap_X* self, RawKey rkey, RawMapped rmapped); // always update rmapped
-void cmap_X_emplace_n(cmap_X* self, const cmap_X_rawvalue_t arr[], size_t n);
+void cmap_X_emplace_items(cmap_X* self, const cmap_X_rawvalue_t arr[], size_t n);
size_t cmap_X_erase(cmap_X* self, RawKey rkey); // return 0 or 1
cmap_X_iter_t cmap_X_erase_at(cmap_X* self, cmap_X_iter_t it); // return iter after it
diff --git a/docs/cpque_api.md b/docs/cpque_api.md
index 07f60709..a5cd056e 100644
--- a/docs/cpque_api.md
+++ b/docs/cpque_api.md
@@ -37,7 +37,7 @@ const cpque_X_value_t* cpque_X_top(const cpque_X* self);
void cpque_X_push(cpque_X* self, cpque_X_value_t value);
void cpque_X_emplace(cpque_X* self, cpque_X_rawvalue_t raw);
-void cpque_X_emplace_n(cpque_X *self, const cpque_X_rawvalue_t arr[], size_t n);
+void cpque_X_emplace_items(cpque_X *self, const cpque_X_rawvalue_t arr[], size_t n);
void cpque_X_pop(cpque_X* self);
void cpque_X_erase_at(cpque_X* self, size_t idx);
diff --git a/docs/cqueue_api.md b/docs/cqueue_api.md
index 7a18a9b4..ab8c752b 100644
--- a/docs/cqueue_api.md
+++ b/docs/cqueue_api.md
@@ -32,7 +32,7 @@ cqueue_X_value_t* cqueue_X_back(const cqueue_X* self);
void cqueue_X_push(cqueue_X* self, cqueue_X_value_t value);
void cqueue_X_emplace(cqueue_X* self, cqueue_X_rawvalue_t raw);
-void cqueue_X_emplace_n(cqueue_X *self, const cqueue_X_rawvalue_t arr[], size_t n);
+void cqueue_X_emplace_items(cqueue_X *self, const cqueue_X_rawvalue_t arr[], size_t n);
void cqueue_X_pop(cqueue_X* self);
diff --git a/docs/cset_api.md b/docs/cset_api.md
index be083b75..5a871dd5 100644
--- a/docs/cset_api.md
+++ b/docs/cset_api.md
@@ -45,7 +45,7 @@ cset_X_iter_t cset_X_find(const cset_X* self, RawKey rkey);
cset_X_result_t cset_X_insert(cset_X* self, Key key);
cset_X_result_t cset_X_emplace(cset_X* self, RawKey rkey);
-void cset_X_emplace_n(cset_X* self, const RawKey arr[], size_t n);
+void cset_X_emplace_items(cset_X* self, const RawKey arr[], size_t n);
size_t cset_X_erase(cset_X* self, RawKey rkey); // return 0 or 1
cset_X_iter_t cset_X_erase_at(cset_X* self, cset_X_iter_t it); // return iter after it
diff --git a/docs/csmap_api.md b/docs/csmap_api.md
index ba9a2978..e602c9f8 100644
--- a/docs/csmap_api.md
+++ b/docs/csmap_api.md
@@ -67,7 +67,7 @@ csmap_X_result_t csmap_X_put(csmap_X* self, Key key, Mapped mapped);
csmap_X_result_t csmap_X_emplace(csmap_X* self, RawKey rkey, RawMapped rmapped); // no change if rkey in map
csmap_X_result_t csmap_X_emplace_or_assign(csmap_X* self, RawKey rkey, RawMapped rmapped); // always update rmapped
-void csmap_X_emplace_n(csmap_X* self, const csmap_X_rawvalue_t arr[], size_t n);
+void csmap_X_emplace_items(csmap_X* self, const csmap_X_rawvalue_t arr[], size_t n);
size_t csmap_X_erase(csmap_X* self, RawKey rkey);
csmap_X_iter_t csmap_X_erase_at(csmap_X* self, csmap_X_iter_t it); // returns iter after it
diff --git a/docs/csset_api.md b/docs/csset_api.md
index 3e8f1aff..e4424837 100644
--- a/docs/csset_api.md
+++ b/docs/csset_api.md
@@ -42,7 +42,7 @@ csset_X_value_t* csset_X_find_it(const csset_X* self, RawKey rkey, csset_X_it
csset_X_result_t csset_X_insert(csset_X* self, Key key);
csset_X_result_t csset_X_emplace(csset_X* self, RawKey rkey);
-void csset_X_emplace_n(csset_X* self, const RawKey arr[], size_t n);
+void csset_X_emplace_items(csset_X* self, const RawKey arr[], size_t n);
size_t csset_X_erase(csset_X* self, RawKey rkey);
csset_X_iter_t csset_X_erase_at(csset_X* self, csset_X_iter_t it); // return iter after it
diff --git a/docs/cstack_api.md b/docs/cstack_api.md
index e892ac8e..15975f30 100644
--- a/docs/cstack_api.md
+++ b/docs/cstack_api.md
@@ -32,7 +32,7 @@ cstack_X_value_t* cstack_X_top(const cstack_X* self);
void cstack_X_push(cstack_X* self, cstack_X_value_t value);
void cstack_X_emplace(cstack_X* self, cstack_X_rawvalue_t raw);
-void cstack_X_emplace_n(cstack_X *self, const cstack_X_rawvalue_t arr[], size_t n);
+void cstack_X_emplace_items(cstack_X *self, const cstack_X_rawvalue_t arr[], size_t n);
void cstack_X_pop(cstack_X* self);
diff --git a/docs/cvec_api.md b/docs/cvec_api.md
index 60808cf1..264242c2 100644
--- a/docs/cvec_api.md
+++ b/docs/cvec_api.md
@@ -57,18 +57,18 @@ void cvec_X_push_back(cvec_X* self, Value value);
void cvec_X_emplace_back(cvec_X* self, RawValue raw);
void cvec_X_pop_back(cvec_X* self);
-cvec_X_iter_t cvec_X_insert(cvec_X* self, cvec_X_iter_t it, Value value); // move value
-cvec_X_iter_t cvec_X_insert_at(cvec_X* self, size_t idx, const Value[] arr, size_t n); // move arr values
+cvec_X_iter_t cvec_X_insert(cvec_X* self, size_t idx, Value value); // move value
+cvec_X_iter_t cvec_X_insert_at(cvec_X* self, cvec_X_iter_t it, Value value); // move value
+cvec_X_iter_t cvec_X_insert_n(cvec_X* self, size_t idx, const Value[] arr, size_t n); // move arr values
-cvec_X_iter_t cvec_X_emplace(cvec_X* self, cvec_X_iter_t it, RawValue raw);
-cvec_X_iter_t cvec_X_emplace_range(cvec_X* self, cvec_X_iter_t it,
- cvec_X_iter_t i1, cvec_X_iter_t i2); // note: does clone
-cvec_X_iter_t cvec_X_emplace_at(cvec_X* self, size_t idx, const RawValue[] arr, size_t n);
-void cvec_X_emplace_n(cvec_X *self, const RawValue arr[], size_t n); // emplace_at back
+cvec_X_iter_t cvec_X_emplace(cvec_X* self, size_t idx, RawValue raw);
+cvec_X_iter_t cvec_X_emplace_n(cvec_X* self, size_t idx, const RawValue[] arr, size_t n);
+cvec_X_iter_t cvec_X_emplace_at(cvec_X* self, cvec_X_iter_t it, RawValue raw);
+cvec_X_iter_t cvec_X_emplace_range(cvec_X* self, cvec_X_iter_t it1, cvec_X_iter_t it2); // will clone
-cvec_X_iter_t cvec_X_erase_at(cvec_X* self, cvec_X_iter_t it);
-cvec_X_iter_t cvec_X_erase_range(cvec_X* self, cvec_X_iter_t i1, cvec_X_iter_t i2);
cvec_X_iter_t cvec_X_erase_n(cvec_X* self, size_t idx, size_t n);
+cvec_X_iter_t cvec_X_erase_at(cvec_X* self, cvec_X_iter_t it);
+cvec_X_iter_t cvec_X_erase_range(cvec_X* self, cvec_X_iter_t it1, cvec_X_iter_t it2);
cvec_X_iter_t cvec_X_find(const cvec_X* self, RawValue raw);
cvec_X_iter_t cvec_X_find_in(cvec_X_iter_t i1, cvec_X_iter_t i2, RawValue raw);
@@ -83,8 +83,6 @@ void cvec_X_sort_range(cvec_X_iter_t i1, cvec_X_iter_t i2,
cvec_X_iter_t cvec_X_begin(const cvec_X* self);
cvec_X_iter_t cvec_X_end(const cvec_X* self);
void cvec_X_next(cvec_X_iter_t* iter);
-cvec_X_iter_t cvec_X_it(cvec_X* self, size_t pos);
-cvec_X_iter_t cvec_X_adv(cvec_X_iter_t it, ptrdiff_t d);
cvec_X_value_t cvec_X_value_clone(cvec_X_value_t val);
```
diff --git a/examples/cpque.c b/examples/cpque.c
index f9de44f1..bcff6eab 100644
--- a/examples/cpque.c
+++ b/examples/cpque.c
@@ -38,7 +38,7 @@ int main() {
print_cpque_imax(q);
cpque_imin q2 = cpque_imin_init();
- cpque_imin_emplace_n(&q2, data, c_arraylen(data));
+ cpque_imin_emplace_items(&q2, data, c_arraylen(data));
print_cpque_imin(q2);
diff --git a/stc/ccommon.h b/stc/ccommon.h
index c44b9384..268b626d 100644
--- a/stc/ccommon.h
+++ b/stc/ccommon.h
@@ -67,8 +67,8 @@
#define c_struct(S) typedef struct S S; struct S
#if __cplusplus
-#define c_new(T) static_cast<T*>(c_malloc(sizeof(T))
-#define c_new_n(T, n) static_cast<T*>(c_malloc(sizeof(T[n]))
+#define c_new(T) static_cast<T*>(c_malloc(sizeof(T)))
+#define c_new_n(T, n) static_cast<T*>(c_malloc(sizeof(T)*(n)))
#else
#define c_new(T) c_malloc(sizeof(T))
#define c_new_n(T, n) c_malloc(sizeof(T[n]))
@@ -129,7 +129,7 @@
#define c_emplace(CX, c, ...) do { \
const CX##_rawvalue_t _c_arr[] = __VA_ARGS__; \
- CX##_emplace_n(&(c), _c_arr, c_arraylen(_c_arr)); \
+ CX##_emplace_items(&(c), _c_arr, c_arraylen(_c_arr)); \
} while (0)
#define c_del(CX, ...) do { \
diff --git a/stc/cdeq.h b/stc/cdeq.h
index bcd8b50d..d5abcdba 100644
--- a/stc/cdeq.h
+++ b/stc/cdeq.h
@@ -45,7 +45,7 @@
struct cdeq_rep { size_t size, cap; void* base[]; };
-#define cdeq_rep_(self) c_container_of((self)->_base, struct cdeq_rep, base)
+#define _cdeq_rep(self) c_container_of((self)->_base, struct cdeq_rep, base)
#define _c_using_cdeq(CX, Value, valueCompareRaw, valueDel, valueFromRaw, valueToRaw, RawValue) \
@@ -63,7 +63,6 @@ struct cdeq_rep { size_t size, cap; void* base[]; };
STC_API void CX##_expand_right_(CX* self, size_t idx, size_t n); \
STC_API CX##_iter_t CX##_find_in(CX##_iter_t p1, CX##_iter_t p2, RawValue raw); \
STC_API int CX##_value_compare(const CX##_value_t* x, const CX##_value_t* y); \
- STC_API void CX##_emplace_n(CX *self, const CX##_rawvalue_t arr[], size_t n); \
STC_API void CX##_push_back(CX* self, Value value); \
STC_API void CX##_push_front(CX* self, Value value); \
STC_API CX##_iter_t CX##_erase_range_p(CX* self, CX##_value_t* p1, CX##_value_t* p2); \
@@ -71,9 +70,9 @@ struct cdeq_rep { size_t size, cap; void* base[]; };
const CX##_value_t* p1, const CX##_value_t* p2, bool clone); \
STC_API CX##_iter_t CX##_emplace_range_p(CX* self, CX##_value_t* pos, \
const CX##_rawvalue_t* p1, const CX##_rawvalue_t* p2); \
- STC_INLINE bool CX##_empty(CX deq) {return !cdeq_rep_(&deq)->size;} \
- STC_INLINE size_t CX##_size(CX deq) {return cdeq_rep_(&deq)->size;} \
- STC_INLINE size_t CX##_capacity(CX deq) {return cdeq_rep_(&deq)->cap;} \
+ STC_INLINE bool CX##_empty(CX deq) {return !_cdeq_rep(&deq)->size;} \
+ STC_INLINE size_t CX##_size(CX deq) {return _cdeq_rep(&deq)->size;} \
+ STC_INLINE size_t CX##_capacity(CX deq) {return _cdeq_rep(&deq)->cap;} \
STC_INLINE void CX##_swap(CX* a, CX* b) {c_swap(CX, *a, *b);} \
STC_INLINE Value CX##_value_fromraw(RawValue raw) {return valueFromRaw(raw);} \
STC_INLINE Value CX##_value_clone(Value val) \
@@ -83,17 +82,17 @@ struct cdeq_rep { size_t size, cap; void* base[]; };
STC_INLINE void CX##_emplace_front(CX* self, RawValue raw) \
{CX##_push_front(self, valueFromRaw(raw));} \
STC_INLINE void CX##_pop_back(CX* self) \
- {valueDel(&self->data[--cdeq_rep_(self)->size]);} \
+ {valueDel(&self->data[--_cdeq_rep(self)->size]);} \
STC_INLINE void CX##_pop_front(CX* self) \
- {valueDel(self->data++); --cdeq_rep_(self)->size;} \
+ {valueDel(self->data++); --_cdeq_rep(self)->size;} \
STC_INLINE \
CX##_value_t* CX##_front(const CX* self) {return self->data;} \
STC_INLINE \
CX##_value_t* CX##_back(const CX* self) \
- {return self->data + cdeq_rep_(self)->size - 1;} \
+ {return self->data + _cdeq_rep(self)->size - 1;} \
STC_INLINE \
CX##_value_t* CX##_at(const CX* self, size_t idx) \
- {assert(idx < cdeq_rep_(self)->size); return self->data + idx;} \
+ {assert(idx < _cdeq_rep(self)->size); return self->data + idx;} \
\
STC_INLINE CX \
CX##_with_capacity(size_t n) { \
@@ -104,7 +103,7 @@ struct cdeq_rep { size_t size, cap; void* base[]; };
\
STC_INLINE void \
CX##_reserve(CX* self, size_t n) { \
- size_t sz = cdeq_rep_(self)->size; \
+ size_t sz = _cdeq_rep(self)->size; \
if (n > sz) CX##_expand_right_(self, sz, n - sz); \
} \
\
@@ -115,39 +114,50 @@ struct cdeq_rep { size_t size, cap; void* base[]; };
} \
\
STC_INLINE CX##_iter_t \
- CX##_insert(CX* self, CX##_iter_t it, Value value) { \
- it = CX##_insert_range_p(self, it.ref, &value, &value + 1, false); \
- *it.ref = value; return it; \
+ CX##_insert(CX* self, size_t idx, Value value) { \
+ return CX##_insert_range_p(self, self->data + idx, &value, &value + 1, false); \
} \
STC_INLINE CX##_iter_t \
- CX##_insert_at(CX* self, size_t idx, const CX##_value_t arr[], size_t n) { \
- return CX##_insert_range_p(self, self->data + idx, arr, arr + n, true); \
+ CX##_insert_n(CX* self, size_t idx, const CX##_value_t arr[], size_t n) { \
+ return CX##_insert_range_p(self, self->data + idx, arr, arr + n, false); \
+ } \
+ STC_INLINE CX##_iter_t \
+ CX##_insert_at(CX* self, CX##_iter_t it, Value value) { \
+ return CX##_insert_range_p(self, it.ref, &value, &value + 1, false); \
} \
\
STC_INLINE CX##_iter_t \
- CX##_emplace(CX* self, CX##_iter_t it, RawValue raw) { \
+ CX##_emplace(CX* self, size_t idx, RawValue raw) { \
+ return CX##_emplace_range_p(self, self->data + idx, &raw, &raw + 1); \
+ } \
+ STC_INLINE CX##_iter_t \
+ CX##_emplace_n(CX* self, size_t idx, const CX##_rawvalue_t arr[], size_t n) { \
+ return CX##_emplace_range_p(self, self->data + idx, arr, arr + n); \
+ } \
+ STC_INLINE CX##_iter_t \
+ CX##_emplace_at(CX* self, CX##_iter_t it, RawValue raw) { \
return CX##_emplace_range_p(self, it.ref, &raw, &raw + 1); \
} \
STC_INLINE CX##_iter_t \
CX##_emplace_range(CX* self, CX##_iter_t it, CX##_iter_t it1, CX##_iter_t it2) { \
return CX##_insert_range_p(self, it.ref, it1.ref, it2.ref, true); \
} \
- STC_INLINE CX##_iter_t \
- CX##_emplace_at(CX* self, size_t idx, const CX##_rawvalue_t arr[], size_t n) { \
- return CX##_emplace_range_p(self, self->data + idx, arr, arr + n); \
+ STC_INLINE void \
+ CX##_emplace_items(CX *self, const CX##_rawvalue_t arr[], size_t n) { \
+ CX##_emplace_range_p(self, self->data + _cdeq_rep(self)->size, arr, arr + n); \
} \
\
STC_INLINE CX##_iter_t \
- CX##_erase_range(CX* self, CX##_iter_t it1, CX##_iter_t it2) { \
- return CX##_erase_range_p(self, it1.ref, it2.ref); \
+ CX##_erase_n(CX* self, size_t idx, size_t n) { \
+ return CX##_erase_range_p(self, self->data + idx, self->data + idx + n); \
} \
STC_INLINE CX##_iter_t \
CX##_erase_at(CX* self, CX##_iter_t it) { \
return CX##_erase_range_p(self, it.ref, it.ref + 1); \
} \
STC_INLINE CX##_iter_t \
- CX##_erase_n(CX* self, size_t idx, size_t n) { \
- return CX##_erase_range_p(self, self->data + idx, self->data + idx + n); \
+ CX##_erase_range(CX* self, CX##_iter_t it1, CX##_iter_t it2) { \
+ return CX##_erase_range_p(self, it1.ref, it2.ref); \
} \
\
STC_INLINE CX##_iter_t \
@@ -156,13 +166,10 @@ struct cdeq_rep { size_t size, cap; void* base[]; };
} \
STC_INLINE CX##_iter_t \
CX##_end(const CX* self) { \
- CX##_iter_t it = {self->data + cdeq_rep_(self)->size}; return it; \
+ CX##_iter_t it = {self->data + _cdeq_rep(self)->size}; return it; \
} \
-\
STC_INLINE void \
CX##_next(CX##_iter_t* it) {++it->ref;} \
- STC_INLINE size_t \
- CX##_index(CX deq, CX##_iter_t it) {return it.ref - deq.data;} \
\
STC_INLINE CX##_iter_t \
CX##_find(const CX* self, RawValue raw) { \
@@ -206,18 +213,8 @@ static struct cdeq_rep _cdeq_inits = {0, 0};
} \
\
STC_DEF void \
- CX##_emplace_n(CX *self, const CX##_rawvalue_t arr[], size_t n) { \
- if (!n) return; \
- size_t sz = cdeq_rep_(self)->size; \
- CX##_expand_right_(self, sz, n); \
- CX##_value_t* p = self->data + sz; \
- for (size_t i=0; i < n; ++i) *p++ = valueFromRaw(arr[i]); \
- cdeq_rep_(self)->size += n; \
- } \
-\
- STC_DEF void \
CX##_clear(CX* self) { \
- struct cdeq_rep* rep = cdeq_rep_(self); if (rep->cap) { \
+ struct cdeq_rep* rep = _cdeq_rep(self); if (rep->cap) { \
for (CX##_value_t *p = self->data, *q = p + rep->size; p != q; ++p) \
valueDel(p); \
rep->size = 0; \
@@ -227,13 +224,13 @@ static struct cdeq_rep _cdeq_inits = {0, 0};
STC_DEF void \
CX##_del(CX* self) { \
CX##_clear(self); \
- if (cdeq_rep_(self)->cap) \
- c_free(cdeq_rep_(self)); \
+ if (_cdeq_rep(self)->cap) \
+ c_free(_cdeq_rep(self)); \
} \
\
STC_DEF size_t \
CX##_realloc_(CX* self, size_t n) { \
- struct cdeq_rep* rep = cdeq_rep_(self); \
+ struct cdeq_rep* rep = _cdeq_rep(self); \
size_t sz = rep->size, cap = (size_t) (sz*1.7) + n + 7; \
size_t nfront = _cdeq_nfront(self); \
rep = (struct cdeq_rep*) c_realloc(rep->cap ? rep : NULL, \
@@ -246,7 +243,7 @@ static struct cdeq_rep _cdeq_inits = {0, 0};
\
STC_DEF void \
CX##_expand_left_(CX* self, size_t idx, size_t n) { \
- struct cdeq_rep* rep = cdeq_rep_(self); \
+ struct cdeq_rep* rep = _cdeq_rep(self); \
size_t sz = rep->size, cap = rep->cap; \
size_t nfront = _cdeq_nfront(self), nback = cap - sz - nfront; \
if (nfront >= n) { \
@@ -262,7 +259,7 @@ static struct cdeq_rep _cdeq_inits = {0, 0};
\
STC_DEF void \
CX##_expand_right_(CX* self, size_t idx, size_t n) { \
- struct cdeq_rep* rep = cdeq_rep_(self); \
+ struct cdeq_rep* rep = _cdeq_rep(self); \
size_t sz = rep->size, cap = rep->cap, nfront = _cdeq_nfront(self); \
size_t nback = cap - sz - nfront; \
if (nback >= n || sz*1.3 + n > cap && CX##_realloc_(self, n)) { \
@@ -279,9 +276,9 @@ static struct cdeq_rep _cdeq_inits = {0, 0};
STC_DEF CX##_value_t* \
CX##_insert_space_(CX* self, CX##_value_t* pos, size_t n) { \
size_t idx = pos - self->data; \
- if (idx*2 < cdeq_rep_(self)->size) CX##_expand_left_(self, idx, n); \
+ if (idx*2 < _cdeq_rep(self)->size) CX##_expand_left_(self, idx, n); \
else CX##_expand_right_(self, idx, n); \
- if (n) cdeq_rep_(self)->size += n; \
+ if (n) _cdeq_rep(self)->size += n; \
return self->data + idx; \
} \
\
@@ -292,20 +289,20 @@ static struct cdeq_rep _cdeq_inits = {0, 0};
else \
--self->data; \
*self->data = value; \
- ++cdeq_rep_(self)->size; \
+ ++_cdeq_rep(self)->size; \
} \
\
STC_DEF void \
CX##_push_back(CX* self, Value value) { \
- struct cdeq_rep* rep = cdeq_rep_(self); \
+ struct cdeq_rep* rep = _cdeq_rep(self); \
if (_cdeq_nfront(self) + rep->size == rep->cap) \
CX##_expand_right_(self, rep->size, 1); \
- self->data[cdeq_rep_(self)->size++] = value; \
+ self->data[_cdeq_rep(self)->size++] = value; \
} \
\
STC_DEF CX \
CX##_clone(CX deq) { \
- size_t sz = cdeq_rep_(&deq)->size; \
+ size_t sz = _cdeq_rep(&deq)->size; \
CX out = CX##_with_capacity(sz); \
CX##_insert_range_p(&out, out.data, deq.data, deq.data + sz, true); \
return out; \
@@ -333,11 +330,11 @@ static struct cdeq_rep _cdeq_inits = {0, 0};
CX##_erase_range_p(CX* self, CX##_value_t* p1, CX##_value_t* p2) { \
size_t n = p2 - p1; \
if (n > 0) { \
- CX##_value_t* p = p1, *end = self->data + cdeq_rep_(self)->size; \
+ CX##_value_t* p = p1, *end = self->data + _cdeq_rep(self)->size; \
while (p != p2) valueDel(p++); \
if (p1 == self->data) self->data += n; \
else memmove(p1, p2, (end - p2) * sizeof(Value)); \
- cdeq_rep_(self)->size -= n; \
+ _cdeq_rep(self)->size -= n; \
} \
CX##_iter_t it = {p1}; return it; \
} \
diff --git a/stc/clist.h b/stc/clist.h
index 7474d870..02278cc3 100644
--- a/stc/clist.h
+++ b/stc/clist.h
@@ -104,7 +104,7 @@ STC_API size_t _clist_count(const clist_VOID* self);
STC_API void CX##_push_back(CX* self, Value value); \
STC_API void CX##_push_front(CX* self, Value value); \
STC_API CX##_iter_t CX##_insert(CX* self, CX##_iter_t it, Value value); \
- STC_API void CX##_emplace_n(CX *self, const CX##_rawvalue_t arr[], size_t n); \
+ STC_API void CX##_emplace_items(CX *self, const CX##_rawvalue_t arr[], size_t n); \
STC_API CX##_iter_t CX##_erase_at(CX* self, CX##_iter_t it); \
STC_API CX##_iter_t CX##_erase_range(CX* self, CX##_iter_t it1, CX##_iter_t it2); \
STC_API size_t CX##_remove(CX* self, RawValue val); \
@@ -213,7 +213,7 @@ STC_API size_t _clist_count(const clist_VOID* self);
} \
\
STC_DEF void \
- CX##_emplace_n(CX *self, const CX##_rawvalue_t arr[], size_t n) { \
+ CX##_emplace_items(CX *self, const CX##_rawvalue_t arr[], size_t n) { \
for (size_t i=0; i<n; ++i) CX##_push_back(self, valueFromRaw(arr[i])); \
} \
\
diff --git a/stc/cmap.h b/stc/cmap.h
index cca673ce..1da2d980 100644
--- a/stc/cmap.h
+++ b/stc/cmap.h
@@ -227,7 +227,7 @@ STC_INLINE uint64_t c_default_hash64(const void* data, size_t ignored)
} \
\
STC_INLINE void \
- CX##_emplace_n(CX* self, const CX##_rawvalue_t arr[], size_t n) { \
+ CX##_emplace_items(CX* self, const CX##_rawvalue_t arr[], size_t n) { \
for (size_t i=0; i<n; ++i) SET_ONLY_##C( CX##_emplace(self, arr[i]); ) \
MAP_ONLY_##C( CX##_emplace(self, arr[i].first, arr[i].second); ) \
} \
diff --git a/stc/cpque.h b/stc/cpque.h
index 9bc365c2..680cc6c6 100644
--- a/stc/cpque.h
+++ b/stc/cpque.h
@@ -80,7 +80,7 @@
STC_API void CX##_push(CX* self, CX##_value_t value); \
STC_INLINE void CX##_emplace(CX* self, CX##_rawvalue_t raw) \
{CX##_push(self, ctype##_value_fromraw(raw));} \
- STC_API void CX##_emplace_n(CX *self, const CX##_rawvalue_t arr[], size_t n); \
+ STC_API void CX##_emplace_items(CX *self, const CX##_rawvalue_t arr[], size_t n); \
\
_c_implement_cpque(CX, ctype, valueCompare) \
struct stc_trailing_semicolon
@@ -132,7 +132,7 @@
} \
\
STC_API void \
- CX##_emplace_n(CX *self, const CX##_rawvalue_t arr[], size_t n) { \
+ CX##_emplace_items(CX *self, const CX##_rawvalue_t arr[], size_t n) { \
for (size_t i = 0; i < n; ++i) \
CX##_push(self, ctype##_value_fromraw(arr[i])); \
} \
diff --git a/stc/cqueue.h b/stc/cqueue.h
index 920b155e..046ed2fb 100644
--- a/stc/cqueue.h
+++ b/stc/cqueue.h
@@ -82,8 +82,8 @@
{ctype##_push_back(self, value);} \
STC_INLINE void CX##_emplace(CX* self, CX##_rawvalue_t raw) \
{ctype##_emplace_back(self, raw);} \
- STC_INLINE void CX##_emplace_n(CX *self, const CX##_rawvalue_t arr[], size_t n) \
- {ctype##_emplace_n(self, arr, n);} \
+ STC_INLINE void CX##_emplace_items(CX *self, const CX##_rawvalue_t arr[], size_t n) \
+ {ctype##_emplace_items(self, arr, n);} \
\
STC_INLINE CX##_iter_t CX##_begin(const CX* self) {return ctype##_begin(self);} \
STC_INLINE CX##_iter_t CX##_end(const CX* self) {return ctype##_end(self);} \
diff --git a/stc/csmap.h b/stc/csmap.h
index 6fe35118..b8240fd2 100644
--- a/stc/csmap.h
+++ b/stc/csmap.h
@@ -234,7 +234,7 @@ struct csmap_rep { size_t root, disp, head, size, cap; void* nodes[]; };
} \
\
STC_INLINE void \
- CX##_emplace_n(CX* self, const CX##_rawvalue_t arr[], size_t n) { \
+ CX##_emplace_items(CX* self, const CX##_rawvalue_t arr[], size_t n) { \
for (size_t i=0; i<n; ++i) SET_ONLY_##C( CX##_emplace(self, arr[i]); ) \
MAP_ONLY_##C( CX##_emplace(self, arr[i].first, arr[i].second); ) \
} \
diff --git a/stc/cstack.h b/stc/cstack.h
index 89a262dd..7934fbbe 100644
--- a/stc/cstack.h
+++ b/stc/cstack.h
@@ -70,8 +70,8 @@
{ctype##_push_back(self, value);} \
STC_INLINE void CX##_emplace(CX* self, CX##_rawvalue_t raw) \
{ctype##_emplace_back(self, raw);} \
- STC_INLINE void CX##_emplace_n(CX *self, const CX##_rawvalue_t arr[], size_t n) \
- {ctype##_emplace_n(self, arr, n);} \
+ STC_INLINE void CX##_emplace_items(CX *self, const CX##_rawvalue_t arr[], size_t n) \
+ {ctype##_emplace_items(self, arr, n);} \
\
STC_INLINE CX##_iter_t CX##_begin(const CX* self) {return ctype##_begin(self);} \
STC_INLINE CX##_iter_t CX##_end(const CX* self) {return ctype##_end(self);} \
diff --git a/stc/cvec.h b/stc/cvec.h
index 21394913..cc50a951 100644
--- a/stc/cvec.h
+++ b/stc/cvec.h
@@ -113,42 +113,50 @@ struct cvec_rep { size_t size, cap; void* data[]; };
} \
\
STC_INLINE CX##_iter_t \
- CX##_insert(CX* self, CX##_iter_t it, Value value) { \
- return CX##_insert_range_p(self, it.ref, &value, &value + 1, false); \
+ CX##_insert(CX* self, size_t idx, Value value) { \
+ return CX##_insert_range_p(self, self->data + idx, &value, &value + 1, false); \
} \
STC_INLINE CX##_iter_t \
- CX##_insert_at(CX* self, size_t idx, const CX##_value_t arr[], size_t n) { \
+ CX##_insert_n(CX* self, size_t idx, const CX##_value_t arr[], size_t n) { \
return CX##_insert_range_p(self, self->data + idx, arr, arr + n, false); \
} \
+ STC_INLINE CX##_iter_t \
+ CX##_insert_at(CX* self, CX##_iter_t it, Value value) { \
+ return CX##_insert_range_p(self, it.ref, &value, &value + 1, false); \
+ } \
\
STC_INLINE CX##_iter_t \
- CX##_emplace(CX* self, CX##_iter_t it, RawValue raw) { \
+ CX##_emplace(CX* self, size_t idx, RawValue raw) { \
+ return CX##_emplace_range_p(self, self->data + idx, &raw, &raw + 1); \
+ } \
+ STC_INLINE CX##_iter_t \
+ CX##_emplace_n(CX* self, size_t idx, const CX##_rawvalue_t arr[], size_t n) { \
+ return CX##_emplace_range_p(self, self->data + idx, arr, arr + n); \
+ } \
+ STC_INLINE CX##_iter_t \
+ CX##_emplace_at(CX* self, CX##_iter_t it, RawValue raw) { \
return CX##_emplace_range_p(self, it.ref, &raw, &raw + 1); \
} \
STC_INLINE CX##_iter_t \
CX##_emplace_range(CX* self, CX##_iter_t it, CX##_iter_t it1, CX##_iter_t it2) { \
return CX##_insert_range_p(self, it.ref, it1.ref, it2.ref, true); \
} \
- STC_INLINE CX##_iter_t \
- CX##_emplace_at(CX* self, size_t idx, const CX##_rawvalue_t arr[], size_t n) { \
- return CX##_emplace_range_p(self, self->data + idx, arr, arr + n); \
- } \
STC_INLINE void \
- CX##_emplace_n(CX *self, const CX##_rawvalue_t arr[], size_t n) { \
+ CX##_emplace_items(CX *self, const CX##_rawvalue_t arr[], size_t n) { \
CX##_emplace_range_p(self, self->data + _cvec_rep(self)->size, arr, arr + n); \
} \
\
STC_INLINE CX##_iter_t \
- CX##_erase_range(CX* self, CX##_iter_t it1, CX##_iter_t it2) { \
- return CX##_erase_range_p(self, it1.ref, it2.ref); \
+ CX##_erase_n(CX* self, size_t idx, size_t n) { \
+ return CX##_erase_range_p(self, self->data + idx, self->data + idx + n); \
} \
STC_INLINE CX##_iter_t \
CX##_erase_at(CX* self, CX##_iter_t it) { \
return CX##_erase_range_p(self, it.ref, it.ref + 1); \
} \
STC_INLINE CX##_iter_t \
- CX##_erase_n(CX* self, size_t idx, size_t n) { \
- return CX##_erase_range_p(self, self->data + idx, self->data + idx + n); \
+ CX##_erase_range(CX* self, CX##_iter_t it1, CX##_iter_t it2) { \
+ return CX##_erase_range_p(self, it1.ref, it2.ref); \
} \
\
STC_INLINE CX##_value_t* \