uintmap.h 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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. struct {
  10. ALuint key;
  11. ALvoid *value;
  12. } *array;
  13. ALsizei size;
  14. ALsizei maxsize;
  15. ALsizei limit;
  16. RWLock lock;
  17. } UIntMap;
  18. #define UINTMAP_STATIC_INITIALIZE_N(_n) { NULL, 0, 0, (_n), RWLOCK_STATIC_INITIALIZE }
  19. #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);
  25. inline void LockUIntMapRead(UIntMap *map)
  26. { ReadLock(&map->lock); }
  27. inline void UnlockUIntMapRead(UIntMap *map)
  28. { ReadUnlock(&map->lock); }
  29. inline void LockUIntMapWrite(UIntMap *map)
  30. { WriteLock(&map->lock); }
  31. inline void UnlockUIntMapWrite(UIntMap *map)
  32. { WriteUnlock(&map->lock); }
  33. #ifdef __cplusplus
  34. }
  35. #endif
  36. #endif /* AL_UINTMAP_H */