diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-08-17 09:56:44 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-08-17 10:02:20 +0400 |
commit | ed26d9dd90cd67c0ee4d88e1b4da9f2e6ac963d0 (patch) | |
tree | 31555b40ba25a27421361289e68de3287f7528b8 /source/blender | |
parent | 1dd17bed4a7a322e6493914fee25ee9562e153ea (diff) |
BLI_array: utility function for searching an array
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenlib/BLI_array.h | 3 | ||||
-rw-r--r-- | source/blender/blenlib/intern/BLI_array.c | 15 |
2 files changed, 18 insertions, 0 deletions
diff --git a/source/blender/blenlib/BLI_array.h b/source/blender/blenlib/BLI_array.h index 0cd64987997..3a9d013f796 100644 --- a/source/blender/blenlib/BLI_array.h +++ b/source/blender/blenlib/BLI_array.h @@ -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__ */ diff --git a/source/blender/blenlib/intern/BLI_array.c b/source/blender/blenlib/intern/BLI_array.c index 21d7a5a6d10..da2eef8ab6a 100644 --- a/source/blender/blenlib/intern/BLI_array.c +++ b/source/blender/blenlib/intern/BLI_array.c @@ -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; +} |