Use xrange() rather than range() for loop iterations.
[blender.git] / source / blender / blenlib / BLI_ghash.h
1 /**
2  * A general (pointer -> pointer) hash table ADT
3  * 
4  * $Id$
5  *
6  * ***** BEGIN GPL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL LICENSE BLOCK *****
30  */
31  
32 #ifndef BLI_GHASH_H
33 #define BLI_GHASH_H
34
35 struct GHash;
36 typedef struct GHash GHash;
37 typedef struct GHashIterator GHashIterator;
38
39 typedef unsigned int    (*GHashHashFP)          (void *key);
40 typedef int                             (*GHashCmpFP)           (void *a, void *b);
41 typedef void                    (*GHashKeyFreeFP)       (void *key);
42 typedef void                    (*GHashValFreeFP)       (void *val);
43
44 GHash*  BLI_ghash_new           (GHashHashFP hashfp, GHashCmpFP cmpfp);
45 void    BLI_ghash_free          (GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp);
46
47 void    BLI_ghash_insert        (GHash *gh, void *key, void *val);
48 int             BLI_ghash_remove        (GHash *gh, void *key, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp);
49 void*   BLI_ghash_lookup        (GHash *gh, void *key);
50 int             BLI_ghash_haskey        (GHash *gh, void *key);
51
52 int             BLI_ghash_size          (GHash *gh);
53
54 /* *** */
55
56         /**
57          * Create a new GHashIterator. The hash table must not be mutated
58          * while the iterator is in use, and the iterator will step exactly
59          * BLI_ghash_size(gh) times before becoming done.
60          * 
61          * @param gh The GHash to iterate over.
62          * @return Pointer to a new DynStr.
63          */
64 GHashIterator*  BLI_ghashIterator_new           (GHash *gh);
65         /**
66          * Free a GHashIterator.
67          *
68          * @param ghi The iterator to free.
69          */
70 void                    BLI_ghashIterator_free          (GHashIterator *ghi);
71
72         /**
73          * Retrieve the key from an iterator.
74          *
75          * @param ghi The iterator.
76          * @return The key at the current index, or NULL if the 
77          * iterator is done.
78          */
79 void*                   BLI_ghashIterator_getKey        (GHashIterator *ghi);
80         /**
81          * Retrieve the value from an iterator.
82          *
83          * @param ghi The iterator.
84          * @return The value at the current index, or NULL if the 
85          * iterator is done.
86          */
87 void*                   BLI_ghashIterator_getValue      (GHashIterator *ghi);
88         /**
89          * Steps the iterator to the next index.
90          *
91          * @param ghi The iterator.
92          */
93 void                    BLI_ghashIterator_step          (GHashIterator *ghi);
94         /**
95          * Determine if an iterator is done (has reached the end of
96          * the hash table).
97          *
98          * @param ghi The iterator.
99          * @return True if done, False otherwise.
100          */
101 int                             BLI_ghashIterator_isDone        (GHashIterator *ghi);
102
103 /* *** */
104
105 unsigned int    BLI_ghashutil_ptrhash   (void *key);
106 int                             BLI_ghashutil_ptrcmp    (void *a, void *b);
107
108 unsigned int    BLI_ghashutil_strhash   (void *key);
109 int                             BLI_ghashutil_strcmp    (void *a, void *b);
110
111 unsigned int    BLI_ghashutil_inthash   (void *ptr);
112 int                             BLI_ghashutil_intcmp(void *a, void *b);
113
114 #endif
115