summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--stc/cslist.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/stc/cslist.h b/stc/cslist.h
index dd321f00..e8743cd2 100644
--- a/stc/cslist.h
+++ b/stc/cslist.h
@@ -58,6 +58,7 @@
#define cslist_init {NULL}
#define cslist_front(list) (list).last->next->value
#define cslist_back(list) (list).last->value
+#define cslist_empty(list) ((list).last == NULL)
#define declare_CSList_6(tag, Value, valueDestroy, valueCompare, ValueRaw, valueGetRaw) \
\
@@ -118,6 +119,19 @@
return it; \
} \
\
+ static inline int \
+ cslist_##tag##_remove(CSList_##tag* self, ValueRaw val) { \
+ cslist_##tag##_iter_t prev = {self->last}; int n = 0; \
+ c_foreach (i, cslist_##tag, *self) { \
+ if (valueCompare(valueGetRaw(&i.item->value), &val) == 0) { \
+ cslist_##tag##_eraseAfter(self, prev), ++n; \
+ if (prev.item == i.item) break; \
+ } \
+ prev = i; \
+ } \
+ return n; \
+ } \
+ \
typedef Value cslist_##tag##_value_t