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) \
 | 
			
		||||
	_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__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user