BLI_array: utility function for searching an array
authorCampbell Barton <ideasman42@gmail.com>
Sun, 17 Aug 2014 05:56:44 +0000 (15:56 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 17 Aug 2014 06:02:20 +0000 (16:02 +1000)
source/blender/blenlib/BLI_array.h
source/blender/blenlib/intern/BLI_array.c

index 0cd64987997d3f78bc07ab61fe018fc579fa1b81..3a9d013f79657e33f849a574102dc353e25b0c1d 100644 (file)
@@ -181,5 +181,8 @@ void _bli_array_wrap(void *arr, unsigned int arr_len, size_t arr_stride, int dir
 #define BLI_array_wrap(arr, arr_len, dir) \
        _bli_array_wrap(arr, arr_len, sizeof(*(arr)), dir)
 
+int _bli_array_findindex(const void *arr, unsigned int arr_len, size_t arr_stride, const void *p);
+#define BLI_array_findindex(arr, arr_len, p) \
+       _bli_array_findindex(arr, arr_len, sizeof(*(arr)), p)
 
 #endif  /* __BLI_ARRAY_H__ */
index 21d7a5a6d10273dc8208e7b35b12aaaceb474a58..da2eef8ab6a864a8a5b6ae22d4df04beb05c1211 100644 (file)
@@ -137,3 +137,18 @@ void _bli_array_wrap(void *arr_v, unsigned int arr_len, size_t arr_stride, int d
                BLI_assert(0);
        }
 }
+
+/**
+ * \note Not efficient, use for error checks/asserts.
+ */
+int _bli_array_findindex(const void *arr, unsigned int arr_len, size_t arr_stride, const void *p)
+{
+       const char *arr_step = (const char *)arr;
+       unsigned int i;
+       for (i = 0; i < arr_len; i++, arr_step += arr_stride) {
+               if (memcmp(arr_step, p, arr_stride) == 0) {
+                       return (int)i;
+               }
+       }
+       return -1;
+}