diff --git a/src/Audio/Source.cpp b/src/Audio/Source.cpp index 8eba148bc..aaa0ab9d4 100644 --- a/src/Audio/Source.cpp +++ b/src/Audio/Source.cpp @@ -24,6 +24,8 @@ #include "Source.h" +#include + #include "Audio/Buffer.h" namespace Magnum { namespace Audio { @@ -37,8 +39,8 @@ Source& Source::setBuffer(Buffer* buffer) { namespace { -const ALuint* sourceIds(const std::initializer_list& sources) { - ALuint* const ids = new ALuint[sources.size()]; +Containers::Array sourceIds(const std::initializer_list& sources) { + Containers::Array ids(sources.size()); for(auto it = sources.begin(); it != sources.end(); ++it) { CORRADE_INTERNAL_ASSERT(*it); ids[it-sources.begin()] = (*it)->id(); @@ -46,8 +48,8 @@ const ALuint* sourceIds(const std::initializer_list& sources) { return ids; } -const ALuint* sourceIds(const std::vector& sources) { - ALuint* const ids = new ALuint[sources.size()]; +Containers::Array sourceIds(const std::vector& sources) { + Containers::Array ids(sources.size()); for(auto it = sources.begin(); it != sources.end(); ++it) { CORRADE_INTERNAL_ASSERT(*it); ids[it-sources.begin()] = (*it)->id(); @@ -57,54 +59,44 @@ const ALuint* sourceIds(const std::vector& sources) { } -/** @todo Okay, this is too much code copying even for me */ - void Source::play(std::initializer_list sources) { - const ALuint* const ids = sourceIds(sources); - alSourcePlayv(sources.size(), ids); - delete[] ids; + const auto ids = sourceIds(sources); + alSourcePlayv(ids.size(), ids); } void Source::play(const std::vector& sources) { - const ALuint* const ids = sourceIds(sources); - alSourcePlayv(sources.size(), ids); - delete[] ids; + const auto ids = sourceIds(sources); + alSourcePlayv(ids.size(), ids); } void Source::pause(std::initializer_list sources) { - const ALuint* const ids = sourceIds(sources); - alSourcePausev(sources.size(), ids); - delete[] ids; + const auto ids = sourceIds(sources); + alSourcePausev(ids.size(), ids); } void Source::pause(const std::vector& sources) { - const ALuint* const ids = sourceIds(sources); - alSourcePausev(sources.size(), ids); - delete[] ids; + const auto ids = sourceIds(sources); + alSourcePausev(ids.size(), ids); } void Source::stop(std::initializer_list sources) { - const ALuint* const ids = sourceIds(sources); - alSourceStopv(sources.size(), ids); - delete[] ids; + const auto ids = sourceIds(sources); + alSourceStopv(ids.size(), ids); } void Source::stop(const std::vector& sources) { - const ALuint* const ids = sourceIds(sources); - alSourceStopv(sources.size(), ids); - delete[] ids; + const auto ids = sourceIds(sources); + alSourceStopv(ids.size(), ids); } void Source::rewind(std::initializer_list sources) { - const ALuint* const ids = sourceIds(sources); - alSourceRewindv(sources.size(), ids); - delete[] ids; + const auto ids = sourceIds(sources); + alSourceRewindv(ids.size(), ids); } void Source::rewind(const std::vector& sources) { - const ALuint* const ids = sourceIds(sources); - alSourceRewindv(sources.size(), ids); - delete[] ids; + const auto ids = sourceIds(sources); + alSourceRewindv(ids.size(), ids); } Debug operator<<(Debug debug, const Source::State value) {