Implement IT_END operator.

Add missing IT_LAST operator
This commit is contained in:
Patrick Pelissier committed 2017-03-13 10:32:57 +01:00
1 parent c09ce9c949
commit eaf3af8c07
6 files changed
+94

No files matched your search

+20
View File
@@ -60,6 +60,8 @@
,SUBTYPE(M_C3(array_type_,name,_t)) \
,IT_TYPE(M_C3(array_it_,name,_t)) \
,IT_FIRST(M_C3(array_,name,_it)) \
,IT_LAST(M_C3(array_,name,_it_last)) \
,IT_END(M_C3(array_,name,_it_end)) \
,IT_SET(M_C3(array_,name,_it_set)) \
,IT_END_P(M_C3(array_,name,_end_p)) \
,IT_LAST_P(M_C3(array_,name,_last_p)) \
@@ -466,6 +468,24 @@
it->array = v; \
} \
\
static inline void \
M_C3(array_, name, _it_last)(M_C3(array_it_,name,_t) it, \
M_C3(array_, name, _t) v) \
{ \
assert (it != NULL && v != NULL); \
it->index = v->size - 1; \
it->array = v; \
} \
\
static inline void \
M_C3(array_, name, _it_end)(M_C3(array_it_,name,_t) it, \
M_C3(array_, name, _t) v) \
{ \
assert (it != NULL && v != NULL); \
it->index = v->size; \
it->array = v; \
} \
\
static inline void \
M_C3(array_, name, _it_set)(M_C3(array_it_,name,_t) it, \
const M_C3(array_it_, name, _t) org) \
+18
View File
@@ -362,6 +362,22 @@ bitset_it_set(bitset_it_t it, const bitset_it_t itorg)
it->set = itorg->set;
}
static inline void
bitset_it_last(bitset_it_t it, bitset_t set)
{
BITSETI_CONTRACT (set);
it->index = set->size-1;
it->set = set;
}
static inline void
bitset_it_end(bitset_it_t it, bitset_t set)
{
BITSETI_CONTRACT (set);
it->index = set->size;
it->set = set;
}
static inline bool
bitset_end_p(const bitset_it_t it)
{
@@ -571,6 +587,8 @@ bitset_hash(const bitset_t dest)
,IT_TYPE(bitset_it_t) \
,IT_FIRST(bitset_it) \
,IT_SET(bitset_it_set) \
,IT_LAST(bitset_it_last) \
,IT_END(bitset_it_end) \
,IT_END_P(bitset_end_p) \
,IT_LAST_P(bitset_last_p) \
,IT_EQUAL_P(bitset_it_equal_p) \
+10
View File
@@ -287,6 +287,15 @@
} \
\
static inline bool \
M_C3(dict_, name, _it_end)(M_C3(dict_it_, name,_t) it, \
M_C3(dict_, name,_t) d) \
{ \
assert (it != NULL && d != NULL); \
M_C3(list_dict_pair_, name, _it_end)(it->list_it, \
*M_C3(array_list_dict_pair_, name, _get)(d->table, 0)); \
} \
\
static inline bool \
M_C3(dict_, name, _end_p)(const M_C3(dict_it_, name,_t) it) \
{ \
assert (it != NULL); \
@@ -450,6 +459,7 @@
IT_TYPE(M_C3(dict_it_,type,_t)), \
IT_FIRST(M_C3(dict_,type,_it)), \
IT_SET(M_C3(dict_, type, _it_set)), \
IT_END(M_C3(dict_, type, _it_end)), \
IT_END_P(M_C3(dict_,type,_end_p)), \
IT_LAST_P(M_C3(dict_,type,_last_p)), \
IT_NEXT(M_C3(dict_,type,_next)), \
+25
View File
@@ -72,6 +72,8 @@ typedef struct ilist_head_s {
IT_TYPE(M_C3(ilist_it_,name,_t)), \
IT_FIRST(M_C3(ilist_,name,_it)), \
IT_SET(M_C3(ilist_,name,_it_set)), \
IT_LAST(M_C3(ilist_,name,_it_last)), \
IT_END(M_C3(ilist_,name,_it_end)), \
IT_END_P(M_C3(ilist_,name,_end_p)), \
IT_LAST_P(M_C3(ilist_,name,_last_p)), \
IT_EQUAL_P(M_C3(ilist_,name,_it_equal_p)), \
@@ -242,6 +244,29 @@ typedef struct ilist_head_s {
it->previous = cit->previous; \
} \
\
static inline void \
M_C3(ilist_, name, _it_last)(M_C3(ilist_it_, name,_t) it, \
M_C3(ilist_, name,_t) list) \
{ \
assert (it != NULL && list != NULL); \
assert (list->name.next != NULL && list->name.next->next != NULL); \
it->head = &list->name; \
it->current = list->name.prev; \
it->next = &list->name; \
it->previous = list->name.prev->prev; \
} \
\
static inline void \
M_C3(ilist_, name, _it_end)(M_C3(ilist_it_, name,_t) it, \
M_C3(ilist_, name,_t) list) \
{ \
assert (it != NULL && list != NULL); \
it->head = &list->name; \
it->current = &list->name; \
it->next = list->name.next; \
it->previous = list->name.prev; \
} \
\
static inline bool \
M_C3(ilist_, name, _end_p)(const M_C3(ilist_it_, name,_t) it) \
{ \
+11
View File
@@ -60,6 +60,7 @@
SUBTYPE(M_C3(list_type_,name,_t)), \
IT_TYPE(M_C3(list_it_,name,_t)), \
IT_FIRST(M_C3(list_,name,_it)), \
IT_END(M_C3(list_,name,_it_end)), \
IT_SET(M_C3(list_,name,_it_set)), \
IT_END_P(M_C3(list_,name,_end_p)), \
IT_EQUAL_P(M_C3(list_,name,_it_equal_p)), \
@@ -222,6 +223,16 @@
it1[0].previous = it2[0].previous; \
} \
\
static inline void \
M_C3(list_, name, _it_end)(M_C3(list_it_, name,_t) it1, \
const M_C3(list_, name,_t) v) \
{ \
assert (it1 != NULL && v != NULL); \
(void)v; /* unused */ \
it1[0].l[0] = NULL; \
it1[0].previous = NULL; \
} \
\
static inline bool \
M_C3(list_, name, _end_p)(const M_C3(list_it_, name,_t) v) \
{ \
+10
View File
@@ -64,6 +64,8 @@
IT_TYPE(M_C3(rbtree_it_,name,_t)), \
IT_FIRST(M_C3(rbtree_,name,_it)), \
IT_SET(M_C3(rbtree_,name,_it_set)), \
IT_LAST(M_C3(rbtree_,name,_it_last)), \
IT_END(M_C3(rbtree_,name,_it_end)), \
IT_END_P(M_C3(rbtree_,name,_end_p)), \
IT_LAST_P(M_C3(rbtree_,name,_last_p)), \
IT_EQUAL_P(M_C3(rbtree_,name,_it_equal_p)), \
@@ -369,6 +371,14 @@ typedef enum {
M_C3(rbtreei_, name, _it)(it, tree, 1); \
} \
\
static inline void \
M_C3(rbtree_, name, _it_end)(M_C3(rbtree_it_, name,_t) it, \
const M_C3(rbtree_, name,_t) tree) \
{ \
assert (it != NULL && tree != NULL); \
it->cpt = 0; \
} \
\
static inline bool \
M_C3(rbtree_, name, _end_p)(const M_C3(rbtree_it_, name,_t) it) \
{ \