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 }