aboutsummaryrefslogtreecommitdiffstats
path: root/OpenAL32
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2018-11-20 10:01:20 -0800
committerChris Robinson <[email protected]>2018-11-20 10:01:20 -0800
commit1e31ac469e129ccd5cde5fb890b31fa8b6815a9b (patch)
tree7f5dec8b7e58ad404b02e1935c01fe21ccfcb04d /OpenAL32
parent29558c091b55e54770869deb13483fa0b8e35e12 (diff)
Store effect slots as unique_ptrs
Diffstat (limited to 'OpenAL32')
-rw-r--r--OpenAL32/alAuxEffectSlot.cpp37
-rw-r--r--OpenAL32/alSource.cpp2
2 files changed, 16 insertions, 23 deletions
diff --git a/OpenAL32/alAuxEffectSlot.cpp b/OpenAL32/alAuxEffectSlot.cpp
index cce3e5d8..ea1765bb 100644
--- a/OpenAL32/alAuxEffectSlot.cpp
+++ b/OpenAL32/alAuxEffectSlot.cpp
@@ -46,7 +46,7 @@ inline ALeffectslot *LookupEffectSlot(ALCcontext *context, ALuint id) noexcept
--id;
if(UNLIKELY(id >= context->EffectSlotList.size()))
return nullptr;
- return context->EffectSlotList[id];
+ return context->EffectSlotList[id].get();
}
inline ALeffect *LookupEffect(ALCdevice *device, ALuint id) noexcept
@@ -211,23 +211,22 @@ AL_API ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslo
iter = context->EffectSlotList.end() - 1;
}
- auto slot = new ALeffectslot{};
- ALenum err{InitEffectSlot(slot)};
+ *iter = std::unique_ptr<ALeffectslot>(new ALeffectslot{});
+ ALenum err{InitEffectSlot(iter->get())};
if(err != AL_NO_ERROR)
{
- delete slot;
+ *iter = nullptr;
slotlock.unlock();
alDeleteAuxiliaryEffectSlots(cur, effectslots);
alSetError(context.get(), err, "Effect slot object allocation failed");
return;
}
- aluInitEffectPanning(slot);
+ aluInitEffectPanning(iter->get());
- slot->id = std::distance(context->EffectSlotList.begin(), iter) + 1;
- *iter = slot;
-
- effectslots[cur] = slot->id;
+ ALuint id = std::distance(context->EffectSlotList.begin(), iter) + 1;
+ (*iter)->id = id;
+ effectslots[cur] = id;
}
AddActiveEffectSlots(effectslots, n, context.get());
}
@@ -266,14 +265,8 @@ AL_API ALvoid AL_APIENTRY alDeleteAuxiliaryEffectSlots(ALsizei n, const ALuint *
// All effectslots are valid, remove and delete them
RemoveActiveEffectSlots(effectslots, n, context.get());
std::for_each(effectslots, effectslots_end,
- [&context](ALuint id) -> void
- {
- ALeffectslot *slot{LookupEffectSlot(context.get(), id)};
- if(!slot) return;
-
- context->EffectSlotList[id-1] = nullptr;
- delete slot;
- }
+ [&context](ALuint id) noexcept -> void
+ { context->EffectSlotList[id-1] = nullptr; }
);
}
@@ -669,11 +662,11 @@ ALvoid ReleaseALAuxiliaryEffectSlots(ALCcontext *context)
size_t leftover = 0;
for(auto &entry : context->EffectSlotList)
{
- if(!entry) continue;
- delete entry;
- entry = nullptr;
-
- ++leftover;
+ if(entry)
+ {
+ entry = nullptr;
+ ++leftover;
+ }
}
if(leftover > 0)
WARN("(%p) Deleted " SZFMT " AuxiliaryEffectSlot%s\n", context, leftover, (leftover==1)?"":"s");
diff --git a/OpenAL32/alSource.cpp b/OpenAL32/alSource.cpp
index 2585039f..2c452918 100644
--- a/OpenAL32/alSource.cpp
+++ b/OpenAL32/alSource.cpp
@@ -105,7 +105,7 @@ static inline ALeffectslot *LookupEffectSlot(ALCcontext *context, ALuint id)
--id;
if(UNLIKELY(id >= context->EffectSlotList.size()))
return nullptr;
- return context->EffectSlotList[id];
+ return context->EffectSlotList[id].get();
}