Home | History | Annotate | Download | only in internal
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  fthash.h                                                               */
      4 /*                                                                         */
      5 /*    Hashing functions (specification).                                   */
      6 /*                                                                         */
      7 /***************************************************************************/
      8 
      9 /*
     10  * Copyright 2000 Computing Research Labs, New Mexico State University
     11  * Copyright 2001-2015
     12  *   Francesco Zappa Nardelli
     13  *
     14  * Permission is hereby granted, free of charge, to any person obtaining a
     15  * copy of this software and associated documentation files (the "Software"),
     16  * to deal in the Software without restriction, including without limitation
     17  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     18  * and/or sell copies of the Software, and to permit persons to whom the
     19  * Software is furnished to do so, subject to the following conditions:
     20  *
     21  * The above copyright notice and this permission notice shall be included in
     22  * all copies or substantial portions of the Software.
     23  *
     24  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     25  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     26  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     27  * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
     28  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
     29  * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
     30  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     31  */
     32 
     33   /*************************************************************************/
     34   /*                                                                       */
     35   /*  This file is based on code from bdf.c,v 1.22 2000/03/16 20:08:50     */
     36   /*                                                                       */
     37   /*  taken from Mark Leisher's xmbdfed package                            */
     38   /*                                                                       */
     39   /*************************************************************************/
     40 
     41 
     42 #ifndef FTHASH_H_
     43 #define FTHASH_H_
     44 
     45 
     46 #include <ft2build.h>
     47 #include FT_FREETYPE_H
     48 
     49 
     50 FT_BEGIN_HEADER
     51 
     52 
     53   typedef union  FT_Hashkey_
     54   {
     55     FT_Int       num;
     56     const char*  str;
     57 
     58   } FT_Hashkey;
     59 
     60 
     61   typedef struct  FT_HashnodeRec_
     62   {
     63     FT_Hashkey  key;
     64     size_t      data;
     65 
     66   } FT_HashnodeRec;
     67 
     68   typedef struct FT_HashnodeRec_  *FT_Hashnode;
     69 
     70 
     71   typedef FT_ULong
     72   (*FT_Hash_LookupFunc)( FT_Hashkey*  key );
     73 
     74   typedef FT_Bool
     75   (*FT_Hash_CompareFunc)( FT_Hashkey*  a,
     76                           FT_Hashkey*  b );
     77 
     78 
     79   typedef struct  FT_HashRec_
     80   {
     81     FT_UInt  limit;
     82     FT_UInt  size;
     83     FT_UInt  used;
     84 
     85     FT_Hash_LookupFunc   lookup;
     86     FT_Hash_CompareFunc  compare;
     87 
     88     FT_Hashnode*  table;
     89 
     90   } FT_HashRec;
     91 
     92   typedef struct FT_HashRec_  *FT_Hash;
     93 
     94 
     95   FT_Error
     96   ft_hash_str_init( FT_Hash    hash,
     97                     FT_Memory  memory );
     98 
     99   FT_Error
    100   ft_hash_num_init( FT_Hash    hash,
    101                     FT_Memory  memory );
    102 
    103   void
    104   ft_hash_str_free( FT_Hash    hash,
    105                     FT_Memory  memory );
    106 
    107 #define ft_hash_num_free  ft_hash_str_free
    108 
    109   FT_Error
    110   ft_hash_str_insert( const char*  key,
    111                       size_t       data,
    112                       FT_Hash      hash,
    113                       FT_Memory    memory );
    114 
    115   FT_Error
    116   ft_hash_num_insert( FT_Int     num,
    117                       size_t     data,
    118                       FT_Hash    hash,
    119                       FT_Memory  memory );
    120 
    121   size_t*
    122   ft_hash_str_lookup( const char*  key,
    123                       FT_Hash      hash );
    124 
    125   size_t*
    126   ft_hash_num_lookup( FT_Int   num,
    127                       FT_Hash  hash );
    128 
    129 
    130 FT_END_HEADER
    131 
    132 
    133 #endif /* FTHASH_H_ */
    134 
    135 
    136 /* END */
    137