ClangFormat: apply to source, most of intern
[blender.git] / source / blender / blenlib / BLI_smallhash.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2008 Blender Foundation.
17  * All rights reserved.
18  */
19
20 #ifndef __BLI_SMALLHASH_H__
21 #define __BLI_SMALLHASH_H__
22
23 /** \file
24  * \ingroup bli
25  */
26
27 #include "BLI_compiler_attrs.h"
28
29 typedef struct {
30   uintptr_t key;
31   void *val;
32 } SmallHashEntry;
33
34 /* how much stack space to use before dynamically allocating memory.
35  * set to match one of the values in 'hashsizes' to avoid too many mallocs  */
36 #define SMSTACKSIZE 131
37 typedef struct SmallHash {
38   unsigned int nbuckets;
39   unsigned int nentries;
40   unsigned int cursize;
41
42   SmallHashEntry *buckets;
43   SmallHashEntry buckets_stack[SMSTACKSIZE];
44 } SmallHash;
45
46 typedef struct {
47   const SmallHash *sh;
48   unsigned int i;
49 } SmallHashIter;
50
51 void BLI_smallhash_init_ex(SmallHash *sh, const unsigned int nentries_reserve) ATTR_NONNULL(1);
52 void BLI_smallhash_init(SmallHash *sh) ATTR_NONNULL(1);
53 void BLI_smallhash_release(SmallHash *sh) ATTR_NONNULL(1);
54 void BLI_smallhash_insert(SmallHash *sh, uintptr_t key, void *item) ATTR_NONNULL(1);
55 bool BLI_smallhash_reinsert(SmallHash *sh, uintptr_t key, void *item) ATTR_NONNULL(1);
56 bool BLI_smallhash_remove(SmallHash *sh, uintptr_t key) ATTR_NONNULL(1);
57 void *BLI_smallhash_lookup(const SmallHash *sh, uintptr_t key)
58     ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT;
59 void **BLI_smallhash_lookup_p(const SmallHash *sh, uintptr_t key)
60     ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT;
61 bool BLI_smallhash_haskey(const SmallHash *sh, uintptr_t key) ATTR_NONNULL(1);
62 int BLI_smallhash_len(const SmallHash *sh) ATTR_NONNULL(1);
63 void *BLI_smallhash_iternext(SmallHashIter *iter, uintptr_t *key)
64     ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT;
65 void **BLI_smallhash_iternext_p(SmallHashIter *iter, uintptr_t *key)
66     ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT;
67 void *BLI_smallhash_iternew(const SmallHash *sh, SmallHashIter *iter, uintptr_t *key)
68     ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT;
69 void **BLI_smallhash_iternew_p(const SmallHash *sh, SmallHashIter *iter, uintptr_t *key)
70     ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT;
71 /* void BLI_smallhash_print(SmallHash *sh); */ /* UNUSED */
72
73 #ifdef DEBUG
74 double BLI_smallhash_calc_quality(SmallHash *sh);
75 #endif
76
77 #endif /* __BLI_SMALLHASH_H__ */