vlc | branch: master | Romain Vimont <[email protected]> | Wed Jul 18 15:51:56 
2018 +0200| [1e61ff83820de335efe881597aaa4b3572bf9db9] | committer: Thomas 
Guillem

vlc_arrays: add ARRAY_FIND()

TAB_FIND() was implemented, but not ARRAY_FIND(). It may be useful.

Signed-off-by: Thomas Guillem <[email protected]>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1e61ff83820de335efe881597aaa4b3572bf9db9
---

 include/vlc_arrays.h |  3 +++
 src/test/arrays.c    | 41 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+)

diff --git a/include/vlc_arrays.h b/include/vlc_arrays.h
index b548ec2dc1..bc2ae2ae6d 100644
--- a/include/vlc_arrays.h
+++ b/include/vlc_arrays.h
@@ -224,6 +224,9 @@ static inline void *realloc_or_free( void *p, size_t sz )
     }                                                                       \
 }
 
+#define ARRAY_FIND(array, p, idx)                                           \
+  TAB_FIND((array).i_size, (array).p_elems, p, idx)
+
 #define ARRAY_REMOVE(array,pos)                                             \
   do {                                                                      \
     if( (array).i_size - (pos) - 1 )                                        \
diff --git a/src/test/arrays.c b/src/test/arrays.c
index 9d40a00650..82277bbbc1 100644
--- a/src/test/arrays.c
+++ b/src/test/arrays.c
@@ -77,6 +77,46 @@ static void test_array_foreach(void)
     ARRAY_RESET(array);
 }
 
+static void test_array_find(void)
+{
+    DECL_ARRAY(int) array;
+    ARRAY_INIT(array);
+
+    ARRAY_APPEND(array, 17);
+    ARRAY_APPEND(array, 52);
+    ARRAY_APPEND(array, 26);
+    ARRAY_APPEND(array, 13);
+    ARRAY_APPEND(array, 40);
+    ARRAY_APPEND(array, 20);
+    ARRAY_APPEND(array, 10);
+    ARRAY_APPEND(array, 5);
+
+    int index;
+
+    ARRAY_FIND(array, 17, index);
+    assert(index == 0);
+
+    ARRAY_FIND(array, 52, index);
+    assert(index == 1);
+
+    ARRAY_FIND(array, 26, index);
+    assert(index == 2);
+
+    ARRAY_FIND(array, 13, index);
+    assert(index == 3);
+
+    ARRAY_FIND(array, 10, index);
+    assert(index == 6);
+
+    ARRAY_FIND(array, 5, index);
+    assert(index == 7);
+
+    ARRAY_FIND(array, 14, index);
+    assert(index == -1);
+
+    ARRAY_RESET(array);
+}
+
 static void test_array_bsearch(void)
 {
     struct item {
@@ -122,5 +162,6 @@ int main(void)
 {
     test_array_insert_remove();
     test_array_foreach();
+    test_array_find();
     test_array_bsearch();
 }

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to