uintmap.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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(INT_MAX)
  19. void InitUIntMap(UIntMap *map, ALsizei limit);
  20. void ResetUIntMap(UIntMap *map);
  21. void RelimitUIntMapNoLock(UIntMap *map, ALsizei limit);
  22. ALenum InsertUIntMapEntry(UIntMap *map, ALuint key, ALvoid *value);
  23. ALenum InsertUIntMapEntryNoLock(UIntMap *map, ALuint key, ALvoid *value);
  24. ALvoid *RemoveUIntMapKey(UIntMap *map, ALuint key);
  25. ALvoid *RemoveUIntMapKeyNoLock(UIntMap *map, ALuint key);
  26. ALvoid *LookupUIntMapKey(UIntMap *map, ALuint key);
  27. ALvoid *LookupUIntMapKeyNoLock(UIntMap *map, ALuint key);
  28. inline void LockUIntMapRead(UIntMap *map)
  29. { ReadLock(&map->lock); }
  30. inline void UnlockUIntMapRead(UIntMap *map)
  31. { ReadUnlock(&map->lock); }
  32. inline void LockUIntMapWrite(UIntMap *map)
  33. { WriteLock(&map->lock); }
  34. inline void UnlockUIntMapWrite(UIntMap *map)
  35. { WriteUnlock(&map->lock); }
  36. #ifdef __cplusplus
  37. }
  38. #endif
  39. #endif /* AL_UINTMAP_H */