sdlBsearchR function

Pointer<NativeType> sdlBsearchR(
  1. Pointer<NativeType> key,
  2. Pointer<NativeType> base,
  3. int nmemb,
  4. int size,
  5. Pointer<NativeFunction<SdlCompareCallbackR>> compare,
  6. Pointer<NativeType> userdata,
)

Perform a binary search on a previously sorted array, passing a userdata pointer to the compare function.

For example:

typedef enum {
sort_increasing,
sort_decreasing,
} sort_method;

typedef struct {
int key;
const char *string;
} data;

int SDLCALL compare(const void *userdata, const void *a, const void *b)
{
sort_method method = (sort_method)(uintptr_t)userdata;
const data *A = (const data *)a;
const data *B = (const data *)b;

if (A->key < B->key) {
return (method == sort_increasing) ? -1 : 1;
} else if (B->key < A->key) {
return (method == sort_increasing) ? 1 : -1;
} else {
return 0;
}
}

data values[] = {
{ 1, "first" }, { 2, "second" }, { 3, "third" }
};
data key = { 2, NULL };

data *result = SDL_bsearch_r(&key, values, SDL_arraysize(values), sizeof(values[0]), compare, (const void *)(uintptr_t)sort_increasing);

\param key a pointer to a key equal to the element being searched for. \param base a pointer to the start of the array. \param nmemb the number of elements in the array. \param size the size of the elements in the array. \param compare a function used to compare elements in the array. \param userdata a pointer to pass to the compare function. \returns a pointer to the matching element in the array, or NULL if not found.

\threadsafety It is safe to call this function from any thread.

\since This function is available since SDL 3.1.3.

\sa SDL_bsearch \sa SDL_qsort_r

extern SDL_DECLSPEC void * SDLCALL SDL_bsearch_r(const void *key, const void *base, size_t nmemb, size_t size, SDL_CompareCallback_r compare, void *userdata)

Implementation

Pointer<NativeType> sdlBsearchR(
    Pointer<NativeType> key,
    Pointer<NativeType> base,
    int nmemb,
    int size,
    Pointer<NativeFunction<SdlCompareCallbackR>> compare,
    Pointer<NativeType> userdata) {
  final sdlBsearchRLookupFunction = libSdl3.lookupFunction<
      Pointer<NativeType> Function(
          Pointer<NativeType> key,
          Pointer<NativeType> base,
          Uint32 nmemb,
          Uint32 size,
          Pointer<NativeFunction<SdlCompareCallbackR>> compare,
          Pointer<NativeType> userdata),
      Pointer<NativeType> Function(
          Pointer<NativeType> key,
          Pointer<NativeType> base,
          int nmemb,
          int size,
          Pointer<NativeFunction<SdlCompareCallbackR>> compare,
          Pointer<NativeType> userdata)>('SDL_bsearch_r');
  return sdlBsearchRLookupFunction(key, base, nmemb, size, compare, userdata);
}