d9bf4f7620
If the requested number of mono and stereo sources exceeds 256, the source limit will be expanded. Any config file setting overrides this. If the device is reset to have fewer sources than are currently allocated, excess sources will remain and be usable as normal, but no more can be generated until enough are delated to go back below the limit.
48 lines
1.3 KiB
C
48 lines
1.3 KiB
C
#ifndef AL_UINTMAP_H
|
|
#define AL_UINTMAP_H
|
|
|
|
#include "AL/al.h"
|
|
#include "rwlock.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct UIntMap {
|
|
ALuint *keys;
|
|
/* Shares memory with keys. */
|
|
ALvoid **values;
|
|
|
|
ALsizei size;
|
|
ALsizei capacity;
|
|
ALsizei limit;
|
|
RWLock lock;
|
|
} UIntMap;
|
|
#define UINTMAP_STATIC_INITIALIZE_N(_n) { NULL, NULL, 0, 0, (_n), RWLOCK_STATIC_INITIALIZE }
|
|
#define UINTMAP_STATIC_INITIALIZE UINTMAP_STATIC_INITIALIZE_N(INT_MAX)
|
|
|
|
void InitUIntMap(UIntMap *map, ALsizei limit);
|
|
void ResetUIntMap(UIntMap *map);
|
|
void RelimitUIntMapNoLock(UIntMap *map, ALsizei limit);
|
|
ALenum InsertUIntMapEntry(UIntMap *map, ALuint key, ALvoid *value);
|
|
ALenum InsertUIntMapEntryNoLock(UIntMap *map, ALuint key, ALvoid *value);
|
|
ALvoid *RemoveUIntMapKey(UIntMap *map, ALuint key);
|
|
ALvoid *RemoveUIntMapKeyNoLock(UIntMap *map, ALuint key);
|
|
ALvoid *LookupUIntMapKey(UIntMap *map, ALuint key);
|
|
ALvoid *LookupUIntMapKeyNoLock(UIntMap *map, ALuint key);
|
|
|
|
inline void LockUIntMapRead(UIntMap *map)
|
|
{ ReadLock(&map->lock); }
|
|
inline void UnlockUIntMapRead(UIntMap *map)
|
|
{ ReadUnlock(&map->lock); }
|
|
inline void LockUIntMapWrite(UIntMap *map)
|
|
{ WriteLock(&map->lock); }
|
|
inline void UnlockUIntMapWrite(UIntMap *map)
|
|
{ WriteUnlock(&map->lock); }
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* AL_UINTMAP_H */
|