Free Electron
uintmap.h
1 #ifndef AL_UINTMAP_H
2 #define AL_UINTMAP_H
3 
4 #include <limits.h>
5 
6 #include "AL/al.h"
7 #include "rwlock.h"
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 typedef struct UIntMap {
14  ALuint *keys;
15  /* Shares memory with keys. */
16  ALvoid **values;
17 
18  ALsizei size;
19  ALsizei capacity;
20  ALsizei limit;
21  RWLock lock;
22 } UIntMap;
23 #define UINTMAP_STATIC_INITIALIZE_N(_n) { NULL, NULL, 0, 0, (_n), RWLOCK_STATIC_INITIALIZE }
24 #define UINTMAP_STATIC_INITIALIZE UINTMAP_STATIC_INITIALIZE_N(INT_MAX)
25 
26 void InitUIntMap(UIntMap *map, ALsizei limit);
27 void ResetUIntMap(UIntMap *map);
28 ALenum InsertUIntMapEntry(UIntMap *map, ALuint key, ALvoid *value);
29 ALvoid *RemoveUIntMapKey(UIntMap *map, ALuint key);
30 ALvoid *LookupUIntMapKey(UIntMap *map, ALuint key);
31 
32 inline void LockUIntMapRead(UIntMap *map) { ReadLock(&map->lock); }
33 inline void UnlockUIntMapRead(UIntMap *map) { ReadUnlock(&map->lock); }
34 inline void LockUIntMapWrite(UIntMap *map) { WriteLock(&map->lock); }
35 inline void UnlockUIntMapWrite(UIntMap *map) { WriteUnlock(&map->lock); }
36 
37 #ifdef __cplusplus
38 }
39 #endif
40 
41 #endif /* AL_UINTMAP_H */