BLI_array: utility function for searching an array
This commit is contained in:
@@ -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) \
|
#define BLI_array_wrap(arr, arr_len, dir) \
|
||||||
_bli_array_wrap(arr, arr_len, sizeof(*(arr)), 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__ */
|
#endif /* __BLI_ARRAY_H__ */
|
||||||
|
|||||||
@@ -137,3 +137,18 @@ void _bli_array_wrap(void *arr_v, unsigned int arr_len, size_t arr_stride, int d
|
|||||||
BLI_assert(0);
|
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;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user