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