Add multiple functions.
This commit is contained in:
1 parent
2f0e2397bd
commit
abd91945bc
1 file changed
+79
-4
@@ -257,6 +257,44 @@
|
|||||||
d->front->index = index; \
|
d->front->index = index; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
static inline type * \
|
||||||
|
M_C(name, _back)(const deque_t d) \
|
||||||
|
{ \
|
||||||
|
DEQUEI_CONTRACT(d); \
|
||||||
|
assert (d->count > 0); \
|
||||||
|
size_t i = d->back->index; \
|
||||||
|
deque_node_t *n = d->back->node; \
|
||||||
|
if (M_UNLIKELY (i == 0)) { \
|
||||||
|
n = deque_node_list_previous_obj(d->list, n); \
|
||||||
|
i = n->size; \
|
||||||
|
} \
|
||||||
|
return &n->data[i-1]; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static inline type * \
|
||||||
|
M_C(name, _front)(const deque_t d) \
|
||||||
|
{ \
|
||||||
|
DEQUEI_CONTRACT(d); \
|
||||||
|
assert (d->count > 0); \
|
||||||
|
size_t i = d->front->index; \
|
||||||
|
deque_node_t *n = d->front->node; \
|
||||||
|
return &n->data[i]; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static inline size_t \
|
||||||
|
M_C(name, _size)(const deque_t d) \
|
||||||
|
{ \
|
||||||
|
DEQUEI_CONTRACT(d); \
|
||||||
|
return d->count; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static inline bool \
|
||||||
|
M_C(name, _empty_p)(const deque_t d) \
|
||||||
|
{ \
|
||||||
|
DEQUEI_CONTRACT(d); \
|
||||||
|
return d->count == 0; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
static inline void \
|
static inline void \
|
||||||
M_C(name, _it)(it_t it, const deque_t d) \
|
M_C(name, _it)(it_t it, const deque_t d) \
|
||||||
{ \
|
{ \
|
||||||
@@ -383,6 +421,7 @@
|
|||||||
M_C(name, _init_set)(deque_t d, const deque_t src) \
|
M_C(name, _init_set)(deque_t d, const deque_t src) \
|
||||||
{ \
|
{ \
|
||||||
DEQUEI_CONTRACT(src); \
|
DEQUEI_CONTRACT(src); \
|
||||||
|
assert (d != NULL); \
|
||||||
M_C(name, _node_list_init)(d->list); \
|
M_C(name, _node_list_init)(d->list); \
|
||||||
d->default_size = DEQUEUI_DEFAULT_SIZE + src->count; \
|
d->default_size = DEQUEUI_DEFAULT_SIZE + src->count; \
|
||||||
d->count = 0; \
|
d->count = 0; \
|
||||||
@@ -403,11 +442,47 @@
|
|||||||
} \
|
} \
|
||||||
DEQUEI_CONTRACT(d); \
|
DEQUEI_CONTRACT(d); \
|
||||||
} \
|
} \
|
||||||
|
\
|
||||||
|
static inline void \
|
||||||
|
M_C(name, _init_move)(deque_t d, deque_t src) \
|
||||||
|
{ \
|
||||||
|
DEQUEI_CONTRACT(src); \
|
||||||
|
assert (d!= NULL); \
|
||||||
|
memcpy(d, src, sizeof(deque_t)); \
|
||||||
|
memset(src, 0, sizeof(deque_t)); \
|
||||||
|
DEQUEI_CONTRACT(d); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static inline void \
|
||||||
|
M_C(name, _move)(deque_t d, deque_t src) \
|
||||||
|
{ \
|
||||||
|
DEQUEI_CONTRACT(d); \
|
||||||
|
DEQUEI_CONTRACT(src); \
|
||||||
|
M_C(name, _clear)(d); \
|
||||||
|
M_C(name, _init_move)(d, src); \
|
||||||
|
DEQUEI_CONTRACT(d); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static inline void \
|
||||||
|
M_C(name, _swap)(deque_t d, deque_t e) \
|
||||||
|
{ \
|
||||||
|
DEQUEI_CONTRACT(d); \
|
||||||
|
DEQUEI_CONTRACT(e); \
|
||||||
|
deque_node_list_swap (d->list, e->list); \
|
||||||
|
M_SWAP(node_t *, d->front->node, e->front->node); \
|
||||||
|
M_SWAP(node_t *, d->back->node, e->back->node); \
|
||||||
|
M_SWAP(size_t, d->front->index, e->front->index); \
|
||||||
|
M_SWAP(size_t, d->back->index, e->back->index); \
|
||||||
|
M_SWAP(size_t, d->default_size, e->default_size); \
|
||||||
|
M_SWAP(size_t, d->count, e->count); \
|
||||||
|
DEQUEI_CONTRACT(d); \
|
||||||
|
DEQUEI_CONTRACT(e); \
|
||||||
|
} \
|
||||||
|
|
||||||
// TODO: init_set, set, move, init_move, equal_p, _hash,
|
|
||||||
// _get, _cget, _clean, _front, _back, _set_at, _push_back_raw,
|
// TODO: set, equal_p, _hash, _get, _cget, _set_at, _push_back_raw,
|
||||||
// _pop_front_raw, _push_back_new, _push_front_new, _empty_p, _size,
|
// _pop_front_raw, _push_back_new, _push_front_new,
|
||||||
// _swap, _swap_at, IO [like array]
|
// _swap_at, IO [like array]
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
Reference in new issue
Block a user