Line data Source code
1 : /* Perform binary search - inline version. 2 : Copyright (C) 1991-2022 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 0 : bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size, 21 : __compar_fn_t __compar) 22 : { 23 0 : size_t __l, __u, __idx; 24 0 : const void *__p; 25 0 : int __comparison; 26 : 27 0 : __l = 0; 28 0 : __u = __nmemb; 29 0 : while (__l < __u) 30 : { 31 0 : __idx = (__l + __u) / 2; 32 0 : __p = (const void *) (((const char *) __base) + (__idx * __size)); 33 0 : __comparison = (*__compar) (__key, __p); 34 0 : if (__comparison < 0) 35 : __u = __idx; 36 0 : else if (__comparison > 0) 37 0 : __l = __idx + 1; 38 : else 39 : { 40 : #if __GNUC_PREREQ(4, 6) 41 : # pragma GCC diagnostic push 42 : # pragma GCC diagnostic ignored "-Wcast-qual" 43 : #endif 44 : return (void *) __p; 45 : #if __GNUC_PREREQ(4, 6) 46 : # pragma GCC diagnostic pop 47 : #endif 48 : } 49 : } 50 : 51 : return NULL; 52 : }