diff options
author | Chris Robinson <[email protected]> | 2018-01-28 00:10:12 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2018-01-28 00:10:12 -0800 |
commit | dcc5a10c7b8bbe6be82c992b6540fd1ad745b7a7 (patch) | |
tree | d5f931b713bbd7c1031aebcbe0e01ca202bdcc71 /OpenAL32/alAuxEffectSlot.c | |
parent | 0051ebace0c419d873c1ebbe615c483c0124e70e (diff) |
Use a fixed array for the effect state factory list
Diffstat (limited to 'OpenAL32/alAuxEffectSlot.c')
-rw-r--r-- | OpenAL32/alAuxEffectSlot.c | 52 |
1 files changed, 24 insertions, 28 deletions
diff --git a/OpenAL32/alAuxEffectSlot.c b/OpenAL32/alAuxEffectSlot.c index f5362e94..cd028bb0 100644 --- a/OpenAL32/alAuxEffectSlot.c +++ b/OpenAL32/alAuxEffectSlot.c @@ -39,12 +39,32 @@ extern inline void LockEffectSlotList(ALCcontext *context); extern inline void UnlockEffectSlotList(ALCcontext *context); -static UIntMap EffectStateFactoryMap; +static const struct { + ALenum Type; + ALeffectStateFactory* (*GetFactory)(void); +} FactoryList[] = { + { AL_EFFECT_NULL, ALnullStateFactory_getFactory }, + { AL_EFFECT_EAXREVERB, ALreverbStateFactory_getFactory }, + { AL_EFFECT_REVERB, ALreverbStateFactory_getFactory }, + { AL_EFFECT_CHORUS, ALchorusStateFactory_getFactory }, + { AL_EFFECT_COMPRESSOR, ALcompressorStateFactory_getFactory }, + { AL_EFFECT_DISTORTION, ALdistortionStateFactory_getFactory }, + { AL_EFFECT_ECHO, ALechoStateFactory_getFactory }, + { AL_EFFECT_EQUALIZER, ALequalizerStateFactory_getFactory }, + { AL_EFFECT_FLANGER, ALflangerStateFactory_getFactory }, + { AL_EFFECT_RING_MODULATOR, ALmodulatorStateFactory_getFactory }, + { AL_EFFECT_DEDICATED_DIALOGUE, ALdedicatedStateFactory_getFactory }, + { AL_EFFECT_DEDICATED_LOW_FREQUENCY_EFFECT, ALdedicatedStateFactory_getFactory } +}; + static inline ALeffectStateFactory *getFactoryByType(ALenum type) { - ALeffectStateFactory* (*getFactory)(void) = LookupUIntMapKey(&EffectStateFactoryMap, type); - if(getFactory != NULL) - return getFactory(); + size_t i; + for(i = 0;i < COUNTOF(FactoryList);i++) + { + if(FactoryList[i].Type == type) + return FactoryList[i].GetFactory(); + } return NULL; } @@ -517,30 +537,6 @@ done: } -void InitEffectFactoryMap(void) -{ - InitUIntMap(&EffectStateFactoryMap, INT_MAX); - - InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_NULL, ALnullStateFactory_getFactory); - InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_EAXREVERB, ALreverbStateFactory_getFactory); - InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_REVERB, ALreverbStateFactory_getFactory); - InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_CHORUS, ALchorusStateFactory_getFactory); - InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_COMPRESSOR, ALcompressorStateFactory_getFactory); - InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_DISTORTION, ALdistortionStateFactory_getFactory); - InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_ECHO, ALechoStateFactory_getFactory); - InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_EQUALIZER, ALequalizerStateFactory_getFactory); - InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_FLANGER, ALflangerStateFactory_getFactory); - InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_RING_MODULATOR, ALmodulatorStateFactory_getFactory); - InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_DEDICATED_DIALOGUE, ALdedicatedStateFactory_getFactory); - InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_DEDICATED_LOW_FREQUENCY_EFFECT, ALdedicatedStateFactory_getFactory); -} - -void DeinitEffectFactoryMap(void) -{ - ResetUIntMap(&EffectStateFactoryMap); -} - - ALenum InitializeEffect(ALCcontext *Context, ALeffectslot *EffectSlot, ALeffect *effect) { ALCdevice *Device = Context->Device; |