Add push/pop_front/back_move methods.
This commit is contained in:
1 parent
e5be1e1f05
commit
0fda117ffe
2 files changed
+57
No files matched your search
@@ -221,6 +221,16 @@
|
|||||||
return p; \
|
return p; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
static inline void \
|
||||||
|
M_C(name, _push_back_move)(deque_t d, type *x) \
|
||||||
|
{ \
|
||||||
|
assert (x != NULL); \
|
||||||
|
type *p = M_C(name, _push_back_raw)(d); \
|
||||||
|
if (M_UNLIKELY(p == NULL)) \
|
||||||
|
return; \
|
||||||
|
M_DO_INIT_MOVE (oplist, *p, *x); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
static inline type* \
|
static inline type* \
|
||||||
M_C(name, _push_front_raw)(deque_t d) \
|
M_C(name, _push_front_raw)(deque_t d) \
|
||||||
{ \
|
{ \
|
||||||
@@ -266,6 +276,16 @@
|
|||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
static inline void \
|
static inline void \
|
||||||
|
M_C(name, _push_front_move)(deque_t d, type *x) \
|
||||||
|
{ \
|
||||||
|
assert (x != NULL); \
|
||||||
|
type *p = M_C(name, _push_front_raw)(d); \
|
||||||
|
if (M_UNLIKELY(p == NULL)) \
|
||||||
|
return; \
|
||||||
|
M_DO_INIT_MOVE (oplist, *p, *x); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static inline void \
|
||||||
M_C(name, _pop_back)(type *ptr, deque_t d) \
|
M_C(name, _pop_back)(type *ptr, deque_t d) \
|
||||||
{ \
|
{ \
|
||||||
DEQUEI_CONTRACT(d); \
|
DEQUEI_CONTRACT(d); \
|
||||||
@@ -301,6 +321,14 @@
|
|||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
static inline void \
|
static inline void \
|
||||||
|
M_C(name, _pop_back_move)(type *ptr, deque_t d) \
|
||||||
|
{ \
|
||||||
|
assert(ptr != NULL); \
|
||||||
|
M_GET_INIT oplist (*ptr); \
|
||||||
|
M_C(name, _pop_back)(ptr, d); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static inline void \
|
||||||
M_C(name, _pop_front)(type *ptr, deque_t d) \
|
M_C(name, _pop_front)(type *ptr, deque_t d) \
|
||||||
{ \
|
{ \
|
||||||
DEQUEI_CONTRACT(d); \
|
DEQUEI_CONTRACT(d); \
|
||||||
@@ -334,6 +362,14 @@
|
|||||||
d->front->index = index; \
|
d->front->index = index; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
static inline void \
|
||||||
|
M_C(name, _pop_front_move)(type *ptr, deque_t d) \
|
||||||
|
{ \
|
||||||
|
assert(ptr != NULL); \
|
||||||
|
M_GET_INIT oplist (*ptr); \
|
||||||
|
M_C(name, _pop_front)(ptr, d); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
static inline type * \
|
static inline type * \
|
||||||
M_C(name, _back)(const deque_t d) \
|
M_C(name, _back)(const deque_t d) \
|
||||||
{ \
|
{ \
|
||||||
|
|||||||
@@ -223,6 +223,26 @@ static void test_advance(void)
|
|||||||
deque_clear(d);
|
deque_clear(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_z(void)
|
||||||
|
{
|
||||||
|
M_LET(d, DEQUE_OPLIST(deque_mpz, TESTOBJ_OPLIST))
|
||||||
|
M_LET(z, TESTOBJ_OPLIST) {
|
||||||
|
testobj_set_ui(z, 1742);
|
||||||
|
deque_mpz_push_back_move(d, &z);
|
||||||
|
assert (testobj_cmp_ui (*deque_mpz_back(d), 1742) == 0);
|
||||||
|
testobj_init(z);
|
||||||
|
testobj_set_ui(z, 4217);
|
||||||
|
deque_mpz_push_front_move(d, &z);
|
||||||
|
assert (testobj_cmp_ui (*deque_mpz_front(d), 4217) == 0);
|
||||||
|
deque_mpz_pop_back_move(&z, d);
|
||||||
|
assert (testobj_cmp_ui (z, 1742) == 0);
|
||||||
|
testobj_clear(z);
|
||||||
|
deque_mpz_pop_front_move(&z, d);
|
||||||
|
assert (testobj_cmp_ui (z, 4217) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static void test_io(void)
|
static void test_io(void)
|
||||||
{
|
{
|
||||||
M_LET(d1, d2, DEQUE_OPLIST(deque_mpz, TESTOBJ_OPLIST))
|
M_LET(d1, d2, DEQUE_OPLIST(deque_mpz, TESTOBJ_OPLIST))
|
||||||
@@ -303,6 +323,7 @@ int main(void)
|
|||||||
test_it();
|
test_it();
|
||||||
test_set();
|
test_set();
|
||||||
test_io();
|
test_io();
|
||||||
|
test_z();
|
||||||
test_advance();
|
test_advance();
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user