From 8f57f3d331de4cb4aa7d06862c2de3424eb1ba5b Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Fri, 22 Apr 2022 12:20:31 +0200 Subject: Readded push()/emplace() to all containers missing them. Made _hash function required for i_key_bind, _eq is derived from _cmp. --- include/stc/cdeq.h | 15 +++++++++++---- include/stc/clist.h | 4 ++++ include/stc/cmap.h | 11 +++++------ include/stc/cqueue.h | 4 ---- include/stc/csmap.h | 12 +++++------- include/stc/template.h | 5 +---- 6 files changed, 26 insertions(+), 25 deletions(-) (limited to 'include/stc') diff --git a/include/stc/cdeq.h b/include/stc/cdeq.h index 7d6c0254..2c0df8c3 100644 --- a/include/stc/cdeq.h +++ b/include/stc/cdeq.h @@ -46,7 +46,7 @@ STC_API _cx_self _cx_memb(_with_capacity)(const size_t n); STC_API bool _cx_memb(_reserve)(_cx_self* self, const size_t n); STC_API void _cx_memb(_clear)(_cx_self* self); STC_API void _cx_memb(_drop)(_cx_self* self); -STC_API _cx_value* _cx_memb(_push_back)(_cx_self* self, i_key value); +STC_API _cx_value* _cx_memb(_push)(_cx_self* self, i_key value); STC_API void _cx_memb(_shrink_to_fit)(_cx_self *self); #if !defined _i_queue #if !defined _i_no_clone @@ -71,8 +71,8 @@ STC_API _cx_iter _cx_memb(_insert_range_p)(_cx_self* self, _cx_value* pos #if !defined _i_no_clone STC_API _cx_self _cx_memb(_clone)(_cx_self cx); #if !defined _i_no_emplace -STC_INLINE _cx_value* _cx_memb(_emplace_back)(_cx_self* self, i_keyraw raw) - { return _cx_memb(_push_back)(self, i_keyfrom(raw)); } +STC_INLINE _cx_value* _cx_memb(_emplace)(_cx_self* self, i_keyraw raw) + { return _cx_memb(_push)(self, i_keyfrom(raw)); } #endif STC_INLINE i_key _cx_memb(_value_clone)(i_key val) { return i_keyclone(val); } @@ -115,6 +115,9 @@ STC_INLINE _cx_value* _cx_memb(_at_mut)(_cx_self* self, const size_t idx) { assert(idx < cdeq_rep_(self)->size); return self->data + idx; } +STC_INLINE _cx_value* _cx_memb(_push_back)(_cx_self* self, i_key value) { + return _cx_memb(_push)(self, value); +} STC_INLINE _cx_iter _cx_memb(_insert)(_cx_self* self, const size_t idx, i_key value) { return _cx_memb(_insert_range_p)(self, self->data + idx, &value, &value + 1); @@ -151,6 +154,10 @@ STC_INLINE _cx_value* _cx_memb(_emplace_front)(_cx_self* self, i_keyraw raw) { return _cx_memb(_push_front)(self, i_keyfrom(raw)); } +STC_INLINE _cx_value* _cx_memb(_emplace_back)(_cx_self* self, i_keyraw raw) { + return _cx_memb(_push)(self, i_keyfrom(raw)); +} + STC_INLINE _cx_iter _cx_memb(_emplace_n)(_cx_self* self, const size_t idx, const _cx_raw arr[], const size_t n) { return _cx_memb(_emplace_range_p)(self, self->data + idx, arr, arr + n); @@ -287,7 +294,7 @@ _cx_memb(_reserve)(_cx_self* self, const size_t n) { } STC_DEF _cx_value* -_cx_memb(_push_back)(_cx_self* self, i_key value) { +_cx_memb(_push)(_cx_self* self, i_key value) { struct cdeq_rep* r = cdeq_rep_(self); if (_cdeq_nfront(self) + r->size == r->cap) { _cx_memb(_expand_right_half_)(self, r->size, 1); diff --git a/include/stc/clist.h b/include/stc/clist.h index 8247b04a..33aa6feb 100644 --- a/include/stc/clist.h +++ b/include/stc/clist.h @@ -122,6 +122,8 @@ STC_INLINE _cx_value* _cx_memb(_emplace_front)(_cx_self* self, i_keyraw raw) { return _cx_memb(_push_front)(self, i_keyfrom(raw)); } STC_INLINE _cx_iter _cx_memb(_emplace_at)(_cx_self* self, _cx_iter it, i_keyraw raw) { return _cx_memb(_insert_at)(self, it, i_keyfrom(raw)); } +STC_INLINE _cx_value* _cx_memb(_emplace)(_cx_self* self, i_keyraw raw) + { return _cx_memb(_push_back)(self, i_keyfrom(raw)); } #endif // !_i_no_emplace #endif // !_i_no_clone @@ -131,6 +133,8 @@ STC_INLINE bool _cx_memb(_empty)(_cx_self cx) { return cx.last == NULL; STC_INLINE size_t _cx_memb(_count)(_cx_self cx) { return _clist_count((const clist_VOID*) &cx); } STC_INLINE void _cx_memb(_clear)(_cx_self* self) { _cx_memb(_drop)(self); } +STC_INLINE _cx_value* _cx_memb(_push)(_cx_self* self, i_key value) + { return _cx_memb(_push_back)(self, value); } STC_INLINE void _cx_memb(_pop_front)(_cx_self* self) { _cx_memb(_erase_after_)(self, self->last); } STC_INLINE _cx_value* _cx_memb(_front)(const _cx_self* self) { return &self->last->next->value; } diff --git a/include/stc/cmap.h b/include/stc/cmap.h index c5172f3b..16041094 100644 --- a/include/stc/cmap.h +++ b/include/stc/cmap.h @@ -118,14 +118,8 @@ STC_INLINE bool _cx_memb(_contains)(const _cx_self* self, i_keyraw rkey) STC_API _cx_result _cx_memb(_insert_or_assign)(_cx_self* self, i_key _key, i_val _mapped); #if !defined _i_no_clone && !defined _i_no_emplace STC_API _cx_result _cx_memb(_emplace_or_assign)(_cx_self* self, i_keyraw rkey, i_valraw rmapped); - STC_INLINE _cx_result _cx_memb(_put_raw)(_cx_self* self, i_keyraw rkey, i_valraw rmapped) - { return _cx_memb(_emplace_or_assign)(self, rkey, rmapped); } // alias #endif - STC_INLINE _cx_result - _cx_memb(_put)(_cx_self* self, i_key _key, i_val _mapped) - { return _cx_memb(_insert_or_assign)(self, _key, _mapped); } - STC_INLINE const _cx_mapped* _cx_memb(_at)(const _cx_self* self, i_keyraw rkey) { chash_bucket_t b = _cx_memb(_bucket_)(self, &rkey); @@ -183,6 +177,11 @@ _cx_memb(_insert)(_cx_self* self, i_key _key _i_MAP_ONLY(, i_val _mapped)) { return _res; } +STC_INLINE _cx_result +_cx_memb(_push)(_cx_self* self, i_key _key _i_MAP_ONLY(, i_val _mapped)) { + return _cx_memb(_insert)(self, _key _i_MAP_ONLY(, _mapped)); +} + STC_INLINE _cx_iter _cx_memb(_find)(const _cx_self* self, i_keyraw rkey) { _cx_size idx; diff --git a/include/stc/cqueue.h b/include/stc/cqueue.h index b07582e0..920f8eac 100644 --- a/include/stc/cqueue.h +++ b/include/stc/cqueue.h @@ -57,13 +57,9 @@ int main() { #define _i_prefix cqueue_ #endif #define _i_queue -#define _push_back _push -#define _emplace_back _emplace #define _pop_front _pop #include "cdeq.h" -#undef _push_back -#undef _emplace_back #undef _pop_front #undef _i_queue diff --git a/include/stc/csmap.h b/include/stc/csmap.h index eba9a591..700aa4c2 100644 --- a/include/stc/csmap.h +++ b/include/stc/csmap.h @@ -159,15 +159,8 @@ _cx_memb(_value_drop)(_cx_value* val) { #ifndef _i_isset #if !defined _i_no_clone && !defined _i_no_emplace STC_API _cx_result _cx_memb(_emplace_or_assign)(_cx_self* self, i_keyraw rkey, i_valraw rmapped); - STC_INLINE _cx_result - _cx_memb(_put_raw)(_cx_self* self, i_keyraw rkey, i_valraw rmapped) - { return _cx_memb(_emplace_or_assign)(self, rkey, rmapped); } // alias #endif STC_API _cx_result _cx_memb(_insert_or_assign)(_cx_self* self, i_key key, i_val mapped); - - STC_INLINE _cx_result - _cx_memb(_put)(_cx_self* self, i_key _key, i_val _mapped) - { return _cx_memb(_insert_or_assign)(self, _key, _mapped); } STC_INLINE const _cx_mapped* _cx_memb(_at)(const _cx_self* self, i_keyraw rkey) @@ -177,6 +170,11 @@ _cx_memb(_value_drop)(_cx_value* val) { { _cx_iter it; return &_cx_memb(_find_it)(self, rkey, &it)->second; } #endif // !_i_isset +STC_INLINE _cx_result +_cx_memb(_push)(_cx_self* self, i_key _key _i_MAP_ONLY(, i_val _mapped)) { + return _cx_memb(_insert)(self, _key _i_MAP_ONLY(, _mapped)); +} + STC_INLINE _cx_iter _cx_memb(_find)(const _cx_self* self, i_keyraw rkey) { _cx_iter it; diff --git a/include/stc/template.h b/include/stc/template.h index f614cd58..d47b06ec 100644 --- a/include/stc/template.h +++ b/include/stc/template.h @@ -123,10 +123,7 @@ #ifndef i_cmp #define i_cmp c_paste(i_keyraw, _cmp) #endif - #if !defined i_eq && (defined _i_ishash || c_option(c_eq)) - #define i_eq c_paste(i_keyraw, _eq) - #endif - #if !defined i_hash && (defined _i_ishash || c_option(c_hash)) + #if !defined i_hash #define i_hash c_paste(i_keyraw, _hash) #endif #endif -- cgit v1.2.3