uintmap.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #ifndef AL_UINTMAP_H
  2. #define AL_UINTMAP_H
  3. #include "AL/al.h"
  4. #include "rwlock.h"
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. typedef struct UIntMap {
  9. ALuint *keys;
  10. /* Shares memory with keys. */
  11. ALvoid **values;
  12. ALsizei size;
  13. ALsizei capacity;
  14. ALsizei limit;
  15. RWLock lock;
  16. } UIntMap;
  17. #define UINTMAP_STATIC_INITIALIZE_N(_n) { NULL, NULL, 0, 0, (_n), RWLOCK_STATIC_INITIALIZE }
  18. #define UINTMAP_STATIC_INITIALIZE UINTMAP_STATIC_INITIALIZE_N(~0)
  19. void InitUIntMap(UIntMap *map, ALsizei limit);
  20. void ResetUIntMap(UIntMap *map);
  21. ALenum InsertUIntMapEntry(UIntMap *map, ALuint key, ALvoid *value);
  22. ALvoid *RemoveUIntMapKey(UIntMap *map, ALuint key);
  23. ALvoid *RemoveUIntMapKeyNoLock(UIntMap *map, ALuint key);
  24. ALvoid *LookupUIntMapKey(UIntMap *map, ALuint key);
  25. ALvoid *LookupUIntMapKeyNoLock(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); }
  34. #ifdef __cplusplus
  35. }
  36. #endif
  37. #endif /* AL_UINTMAP_H */