Skip to content

Commit b9419d4

Browse files
committed
Make INIT_SET and SET operators optionals for deque
1 parent a4acce7 commit b9419d4

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2394,20 +2394,20 @@ The following methods of the common interface are defined (See [Common interface
23942394

23952395
```C
23962396
void name_init(name_t deque)
2397-
void name_init_set(name_t deque, const name_t ref)
2398-
void name_set(name_t deque, const name_t ref)
2397+
void name_init_set(name_t deque, const name_t ref) /* If INIT_SET operator is defined */
2398+
void name_set(name_t deque, const name_t ref) /* If INIT_SET operator is defined */
23992399
void name_init_move(name_t deque, name_t ref)
24002400
void name_move(name_t deque, name_t ref)
24012401
void name_clear(name_t deque)
24022402
void name_reset(name_t deque)
24032403
type *name_back(const name_t deque)
2404-
void name_push_back(name_t deque, type value)
2404+
void name_push_back(name_t deque, type value) /* If INIT_SET operator is defined */
24052405
type *name_push_back_raw(name_t deque)
24062406
type *name_push_back_new(name_t deque)
24072407
void name_emplace_back[suffix](name_t list, args...)
24082408
void name_pop_back(type *data, name_t deque)
24092409
type *name_front(const name_t deque)
2410-
void name_push_front(name_t deque, type value)
2410+
void name_push_front(name_t deque, type value) /* If INIT_SET operator is defined */
24112411
type *name_push_front_raw(name_t deque)
24122412
type *name_push_front_new(name_t deque)
24132413
void name_emplace_front[suffix](name_t list, args...)
@@ -2426,6 +2426,7 @@ const type *name_cref(const name_it_t it)
24262426
void name_remove(name_t deque, name_it_t it)
24272427
type *name_get(const name_t deque, size_t i)
24282428
const type *name_cget(const name_t deque, size_t i)
2429+
void name_set_at(name_t deque, size_t i, type const value) /* If SET operator is defined */
24292430
size_t name_size(const name_t deque)
24302431
void name_get_str(string_t str, const name_t deque, bool append)
24312432
bool name_parse_str(name_t deque, const char str[], const char **endp)

m-deque.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,13 +280,15 @@
280280
return ret; \
281281
} \
282282
\
283+
M_IF_METHOD(INIT_SET, oplist)( \
283284
M_P(void, name, _push_back, deque_t d, type const x) \
284285
{ \
285286
type *p = M_F(name, _push_back_raw)M_R(d); \
286287
M_ON_EXCEPTION(d->back->index --, d->count--) { \
287288
M_CALL_INIT_SET(oplist, *p, x); \
288289
} \
289290
} \
291+
, /* No INIT_SET */ ) \
290292
\
291293
M_IF_METHOD(INIT, oplist)( \
292294
M_P(type *, name, _push_back_new, deque_t d) \
@@ -329,13 +331,15 @@
329331
return ret; \
330332
} \
331333
\
334+
M_IF_METHOD(INIT_SET, oplist)( \
332335
M_P(void, name, _push_front, deque_t d, type const x) \
333336
{ \
334337
type *p = M_F(name, _push_front_raw)M_R(d); \
335338
M_ON_EXCEPTION(d->front->index ++, d->count--) { \
336339
M_CALL_INIT_SET(oplist, *p, x); \
337340
} \
338341
} \
342+
, /* No INIT_SET */ ) \
339343
\
340344
M_IF_METHOD(INIT, oplist)( \
341345
M_P(type *, name, _push_front_new, deque_t d) \
@@ -713,6 +717,7 @@
713717
M_D3QU3_CONTRACT(d); \
714718
} \
715719
\
720+
M_IF_METHOD(INIT_SET, oplist)( \
716721
M_P(void, name, _init_set, deque_t d, const deque_t src) \
717722
{ \
718723
M_D3QU3_CONTRACT(src); \
@@ -749,6 +754,7 @@
749754
M_F(name, _init_set)M_R(d, src); \
750755
} \
751756
} \
757+
, /* No INIT_SET */ ) \
752758
\
753759
M_INLINE void \
754760
M_F(name, _init_move)(deque_t d, deque_t src) \
@@ -816,6 +822,7 @@
816822
return M_CONST_CAST(type, M_F(name, _get)(d, key)); \
817823
} \
818824
\
825+
M_IF_METHOD(SET, oplist)( \
819826
M_P(void, name, _set_at, deque_t d, size_t key, type const x) \
820827
{ \
821828
M_D3QU3_CONTRACT(d); \
@@ -825,6 +832,7 @@
825832
M_CALL_SET(oplist, *p, x); \
826833
M_D3QU3_CONTRACT(d); \
827834
} \
835+
, /* No SET */ ) \
828836
\
829837
M_IF_METHOD(EQUAL, oplist)( \
830838
M_INLINE bool \

tests/test-mdeque.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ DEQUE_DEF(deque_retcode, ReturnCode_t, M_ENUM_OPLIST(ReturnCode_t, SUCCESS))
4848
DEQUE_DEF_AS(DequeDouble, DequeDouble, DequeDoubleIt, double)
4949
#define M_OPL_DequeDouble() DEQUE_OPLIST(DequeDouble, M_BASIC_OPLIST)
5050

51+
DEQUE_DEF(DequeInt2, int, M_OPEXTEND(M_BASIC_OPLIST, INIT_SET(0), SET(0)))
52+
5153
ARRAY_DEF(array, int)
5254

5355
static void test_ti1(int n)

0 commit comments

Comments
 (0)