aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorS. Christoffer Eliesen <christoffer@eliesen.no>2015-11-18 21:12:20 +0100
committerS. Christoffer Eliesen <christoffer@eliesen.no>2015-11-21 22:22:08 +0100
commita33e3badad7fbfa7e229f009c5c1b78c552a935b (patch)
tree660f28b1a065ede1be4d7b652954dcc07db9f47a /common
parent56e80c0f73a9891c50d30ea8f53630fb112f3d23 (diff)
downloadsway-a33e3badad7fbfa7e229f009c5c1b78c552a935b.tar.xz
list: Add list_seq_find.
Sometimes one has to traverse a list to find out if some data already exists there in order to avoid dupilcates in the list, and this function facilitates in that without requiring that the data is ordered.
Diffstat (limited to 'common')
-rw-r--r--common/list.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/common/list.c b/common/list.c
index 45efc16f..ef1cfda8 100644
--- a/common/list.c
+++ b/common/list.c
@@ -53,3 +53,13 @@ void list_cat(list_t *list, list_t *source) {
void list_sort(list_t *list, int compare(const void *left, const void *right)) {
qsort(list->items, list->length, sizeof(void *), compare);
}
+
+int list_seq_find(list_t *list, int (*cmp)(const void *item, const void *data), const void *data) {
+ for (int i = 0; i < list->length; i++) {
+ void *item = list->items[i];
+ if ((cmp)(item, data) == 0) {
+ return i;
+ }
+ }
+ return -1;
+}