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 */