zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

stdlib-bsearch.h (1516B) - Raw


      1 /* Perform binary search - inline version.
      2    Copyright (C) 1991-2025 Free Software Foundation, Inc.
      3    This file is part of the GNU C Library.
      4 
      5    The GNU C Library is free software; you can redistribute it and/or
      6    modify it under the terms of the GNU Lesser General Public
      7    License as published by the Free Software Foundation; either
      8    version 2.1 of the License, or (at your option) any later version.
      9 
     10    The GNU C Library is distributed in the hope that it will be useful,
     11    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13    Lesser General Public License for more details.
     14 
     15    You should have received a copy of the GNU Lesser General Public
     16    License along with the GNU C Library; if not, see
     17    <https://www.gnu.org/licenses/>.  */
     18 
     19 __extern_inline void *
     20 bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size,
     21 	 __compar_fn_t __compar)
     22 {
     23   const void *__p;
     24   int __comparison;
     25 
     26   while (__nmemb)
     27     {
     28       __p = (const void *) (((const char *) __base) + ((__nmemb >> 1) * __size));
     29       __comparison = (*__compar) (__key, __p);
     30       if (__comparison == 0)
     31 	{
     32 #if __GNUC_PREREQ(4, 6)
     33 # pragma GCC diagnostic push
     34 # pragma GCC diagnostic ignored "-Wcast-qual"
     35 #endif
     36 	  return (void *) __p;
     37 #if __GNUC_PREREQ(4, 6)
     38 # pragma GCC diagnostic pop
     39 #endif
     40 	}
     41       if (__comparison > 0)
     42 	{
     43 	  __base = ((const char *) __p) + __size;
     44 	  --__nmemb;
     45 	}
     46       __nmemb >>= 1;
     47     }
     48 
     49   return NULL;
     50 }