(root)/
tar-1.35/
gnu/
unictype/
bitmap.h
       1  /* Three-level bitmap lookup.
       2     Copyright (C) 2000-2002, 2005-2007, 2009-2023 Free Software Foundation, Inc.
       3     Written by Bruno Haible <bruno@clisp.org>, 2000-2002.
       4  
       5     This file is free software: you can redistribute it and/or modify
       6     it under the terms of the GNU Lesser General Public License as
       7     published by the Free Software Foundation; either version 2.1 of the
       8     License, or (at your option) any later version.
       9  
      10     This file 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
      13     GNU Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public License
      16     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      17  
      18  static inline int bitmap_lookup (const void *table, ucs4_t uc);
      19  
      20  /* These values are currently hardcoded into gen-uni-tables.c, function
      21     output_predicate().  */
      22  #define header_0 16
      23  #define header_2 9
      24  #define header_3 127
      25  #define header_4 15
      26  
      27  static inline int
      28  bitmap_lookup (const void *table, ucs4_t uc)
      29  {
      30    unsigned int index1 = uc >> header_0;
      31    if (index1 < ((const int *) table)[0])
      32      {
      33        int lookup1 = ((const int *) table)[1 + index1];
      34        if (lookup1 >= 0)
      35          {
      36            unsigned int index2 = (uc >> header_2) & header_3;
      37            int lookup2 = ((const short *) table)[lookup1 + index2];
      38            if (lookup2 >= 0)
      39              {
      40                unsigned int index3 = (uc >> 5) & header_4;
      41                unsigned int lookup3 = ((const unsigned int *) table)[lookup2 + index3];
      42  
      43                return (lookup3 >> (uc & 0x1f)) & 1;
      44              }
      45          }
      46      }
      47    return 0;
      48  }