Don't try to use the non-standard alloca.h
[openal-soft.git] / include / uintmap.h
blob611ed39b8961cc6cad2f334abebc7270f38e6287
1 #ifndef AL_UINTMAP_H
2 #define AL_UINTMAP_H
4 #include "AL/al.h"
5 #include "rwlock.h"
7 typedef struct UIntMap {
8 struct {
9 ALuint key;
10 ALvoid *value;
11 } *array;
12 ALsizei size;
13 ALsizei maxsize;
14 ALsizei limit;
15 RWLock lock;
16 } UIntMap;
17 #define UINTMAP_STATIC_INITIALIZE_N(_n) { NULL, 0, 0, (_n), RWLOCK_STATIC_INITIALIZE }
18 #define UINTMAP_STATIC_INITIALIZE UINTMAP_STATIC_INITIALIZE_N(~0)
20 void InitUIntMap(UIntMap *map, ALsizei limit);
21 void ResetUIntMap(UIntMap *map);
22 ALenum InsertUIntMapEntry(UIntMap *map, ALuint key, ALvoid *value);
23 ALvoid *RemoveUIntMapKey(UIntMap *map, ALuint key);
24 ALvoid *LookupUIntMapKey(UIntMap *map, ALuint key);
26 inline void LockUIntMapRead(UIntMap *map)
27 { ReadLock(&map->lock); }
28 inline void UnlockUIntMapRead(UIntMap *map)
29 { ReadUnlock(&map->lock); }
30 inline void LockUIntMapWrite(UIntMap *map)
31 { WriteLock(&map->lock); }
32 inline void UnlockUIntMapWrite(UIntMap *map)
33 { WriteUnlock(&map->lock); }
35 #endif /* AL_UINTMAP_H */