From e32fe06efdc2c1e0c0a9a9f0b470d8550b9e9901 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Mon, 26 Mar 2018 12:52:04 +0200 Subject: [PATCH] list: added new list_index() function --- include/villas/list.h | 7 +++++++ lib/list.c | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/include/villas/list.h b/include/villas/list.h index f6ba29dae..aa674d25e 100644 --- a/include/villas/list.h +++ b/include/villas/list.h @@ -110,3 +110,10 @@ void list_sort(struct list *l, cmp_cb_t cmp); /** Set single element in list */ int list_set(struct list *l, int index, void *value); + +/** Return index in list for value. + * + * @retval <0 No list entry matching \p value was found. + * @retval >=0 Entry \p value was found at returned index. + */ +ssize_t list_index(struct list *l, void *value); diff --git a/lib/list.c b/lib/list.c index 2842c4223..34a4838a2 100644 --- a/lib/list.c +++ b/lib/list.c @@ -198,3 +198,27 @@ int list_set(struct list *l, int index, void *value) return 0; } + +ssize_t list_index(struct list *l, void *p) +{ + void *e; + ssize_t f; + + pthread_mutex_lock(&l->lock); + + assert(l->state == STATE_INITIALIZED); + + for (size_t i = 0; i < list_length(l); i++) { + e = list_at(l, i); + if (e == p) { + f = i; + goto found; + } + } + + f = -1; + +found: pthread_mutex_unlock(&l->lock); + + return f; +}