diff options
Diffstat (limited to 'include/cutils/hashmap.h')
-rw-r--r-- | include/cutils/hashmap.h | 150 |
1 files changed, 0 insertions, 150 deletions
diff --git a/include/cutils/hashmap.h b/include/cutils/hashmap.h deleted file mode 100644 index 5cb344c15..000000000 --- a/include/cutils/hashmap.h +++ /dev/null | |||
@@ -1,150 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007 The Android Open Source Project | ||
3 | * | ||
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | * you may not use this file except in compliance with the License. | ||
6 | * You may obtain a copy of the License at | ||
7 | * | ||
8 | * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | * | ||
10 | * Unless required by applicable law or agreed to in writing, software | ||
11 | * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | * See the License for the specific language governing permissions and | ||
14 | * limitations under the License. | ||
15 | */ | ||
16 | |||
17 | /** | ||
18 | * Hash map. | ||
19 | */ | ||
20 | |||
21 | #ifndef __HASHMAP_H | ||
22 | #define __HASHMAP_H | ||
23 | |||
24 | #include <stdbool.h> | ||
25 | #include <stdlib.h> | ||
26 | |||
27 | #ifdef __cplusplus | ||
28 | extern "C" { | ||
29 | #endif | ||
30 | |||
31 | /** A hash map. */ | ||
32 | typedef struct Hashmap Hashmap; | ||
33 | |||
34 | /** | ||
35 | * Creates a new hash map. Returns NULL if memory allocation fails. | ||
36 | * | ||
37 | * @param initialCapacity number of expected entries | ||
38 | * @param hash function which hashes keys | ||
39 | * @param equals function which compares keys for equality | ||
40 | */ | ||
41 | Hashmap* hashmapCreate(size_t initialCapacity, | ||
42 | int (*hash)(void* key), bool (*equals)(void* keyA, void* keyB)); | ||
43 | |||
44 | /** | ||
45 | * Frees the hash map. Does not free the keys or values themselves. | ||
46 | */ | ||
47 | void hashmapFree(Hashmap* map); | ||
48 | |||
49 | /** | ||
50 | * Hashes the memory pointed to by key with the given size. Useful for | ||
51 | * implementing hash functions. | ||
52 | */ | ||
53 | int hashmapHash(void* key, size_t keySize); | ||
54 | |||
55 | /** | ||
56 | * Puts value for the given key in the map. Returns pre-existing value if | ||
57 | * any. | ||
58 | * | ||
59 | * If memory allocation fails, this function returns NULL, the map's size | ||
60 | * does not increase, and errno is set to ENOMEM. | ||
61 | */ | ||
62 | void* hashmapPut(Hashmap* map, void* key, void* value); | ||
63 | |||
64 | /** | ||
65 | * Gets a value from the map. Returns NULL if no entry for the given key is | ||
66 | * found or if the value itself is NULL. | ||
67 | */ | ||
68 | void* hashmapGet(Hashmap* map, void* key); | ||
69 | |||
70 | /** | ||
71 | * Returns true if the map contains an entry for the given key. | ||
72 | */ | ||
73 | bool hashmapContainsKey(Hashmap* map, void* key); | ||
74 | |||
75 | /** | ||
76 | * Gets the value for a key. If a value is not found, this function gets a | ||
77 | * value and creates an entry using the given callback. | ||
78 | * | ||
79 | * If memory allocation fails, the callback is not called, this function | ||
80 | * returns NULL, and errno is set to ENOMEM. | ||
81 | */ | ||
82 | void* hashmapMemoize(Hashmap* map, void* key, | ||
83 | void* (*initialValue)(void* key, void* context), void* context); | ||
84 | |||
85 | /** | ||
86 | * Removes an entry from the map. Returns the removed value or NULL if no | ||
87 | * entry was present. | ||
88 | */ | ||
89 | void* hashmapRemove(Hashmap* map, void* key); | ||
90 | |||
91 | /** | ||
92 | * Gets the number of entries in this map. | ||
93 | */ | ||
94 | size_t hashmapSize(Hashmap* map); | ||
95 | |||
96 | /** | ||
97 | * Invokes the given callback on each entry in the map. Stops iterating if | ||
98 | * the callback returns false. | ||
99 | */ | ||
100 | void hashmapForEach(Hashmap* map, | ||
101 | bool (*callback)(void* key, void* value, void* context), | ||
102 | void* context); | ||
103 | |||
104 | /** | ||
105 | * Concurrency support. | ||
106 | */ | ||
107 | |||
108 | /** | ||
109 | * Locks the hash map so only the current thread can access it. | ||
110 | */ | ||
111 | void hashmapLock(Hashmap* map); | ||
112 | |||
113 | /** | ||
114 | * Unlocks the hash map so other threads can access it. | ||
115 | */ | ||
116 | void hashmapUnlock(Hashmap* map); | ||
117 | |||
118 | /** | ||
119 | * Key utilities. | ||
120 | */ | ||
121 | |||
122 | /** | ||
123 | * Hashes int keys. 'key' is a pointer to int. | ||
124 | */ | ||
125 | int hashmapIntHash(void* key); | ||
126 | |||
127 | /** | ||
128 | * Compares two int keys for equality. | ||
129 | */ | ||
130 | bool hashmapIntEquals(void* keyA, void* keyB); | ||
131 | |||
132 | /** | ||
133 | * For debugging. | ||
134 | */ | ||
135 | |||
136 | /** | ||
137 | * Gets current capacity. | ||
138 | */ | ||
139 | size_t hashmapCurrentCapacity(Hashmap* map); | ||
140 | |||
141 | /** | ||
142 | * Counts the number of entry collisions. | ||
143 | */ | ||
144 | size_t hashmapCountCollisions(Hashmap* map); | ||
145 | |||
146 | #ifdef __cplusplus | ||
147 | } | ||
148 | #endif | ||
149 | |||
150 | #endif /* __HASHMAP_H */ | ||