From 8b209a24ba005ffb00d8b6016bf5470dc229f1eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 30 Jan 2014 00:05:55 +0100 Subject: [PATCH] Audio: use std::reference_wrapper instead of pointers. I'm still learning. --- src/Magnum/Audio/Source.cpp | 53 ++++++++++++++---- src/Magnum/Audio/Source.h | 105 +++++++++++++++++++++++++----------- 2 files changed, 118 insertions(+), 40 deletions(-) diff --git a/src/Magnum/Audio/Source.cpp b/src/Magnum/Audio/Source.cpp index ab0fadf90..229b65dc6 100644 --- a/src/Magnum/Audio/Source.cpp +++ b/src/Magnum/Audio/Source.cpp @@ -40,15 +40,21 @@ Source& Source::setBuffer(Buffer* buffer) { namespace { -Containers::Array sourceIds(const std::initializer_list& sources) { +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(); - } + for(auto it = sources.begin(); it != sources.end(); ++it) + ids[it-sources.begin()] = it->get().id(); + return ids; +} + +Containers::Array sourceIds(const std::vector>& sources) { + Containers::Array ids(sources.size()); + for(auto it = sources.begin(); it != sources.end(); ++it) + ids[it-sources.begin()] = it->get().id(); return ids; } +#ifdef MAGNUM_BUILD_DEPRECATED Containers::Array sourceIds(const std::vector& sources) { Containers::Array ids(sources.size()); for(auto it = sources.begin(); it != sources.end(); ++it) { @@ -57,48 +63,77 @@ Containers::Array sourceIds(const std::vector& sources) { } return ids; } +#endif + +} +void Source::play(std::initializer_list> sources) { + const auto ids = sourceIds(sources); + alSourcePlayv(ids.size(), ids); } -void Source::play(std::initializer_list sources) { +void Source::play(const std::vector>& sources) { const auto ids = sourceIds(sources); alSourcePlayv(ids.size(), ids); } +#ifdef MAGNUM_BUILD_DEPRECATED void Source::play(const std::vector& sources) { const auto ids = sourceIds(sources); alSourcePlayv(ids.size(), ids); } +#endif -void Source::pause(std::initializer_list sources) { +void Source::pause(std::initializer_list> sources) { const auto ids = sourceIds(sources); alSourcePausev(ids.size(), ids); } +void Source::pause(const std::vector>& sources) { + const auto ids = sourceIds(sources); + alSourcePausev(ids.size(), ids); +} + +#ifdef MAGNUM_BUILD_DEPRECATED void Source::pause(const std::vector& sources) { const auto ids = sourceIds(sources); alSourcePausev(ids.size(), ids); } +#endif + +void Source::stop(std::initializer_list> sources) { + const auto ids = sourceIds(sources); + alSourceStopv(ids.size(), ids); +} -void Source::stop(std::initializer_list sources) { +void Source::stop(const std::vector>& sources) { const auto ids = sourceIds(sources); alSourceStopv(ids.size(), ids); } +#ifdef MAGNUM_BUILD_DEPRECATED void Source::stop(const std::vector& sources) { const auto ids = sourceIds(sources); alSourceStopv(ids.size(), ids); } +#endif + +void Source::rewind(std::initializer_list> sources) { + const auto ids = sourceIds(sources); + alSourceRewindv(ids.size(), ids); +} -void Source::rewind(std::initializer_list sources) { +void Source::rewind(const std::vector>& sources) { const auto ids = sourceIds(sources); alSourceRewindv(ids.size(), ids); } +#ifdef MAGNUM_BUILD_DEPRECATED void Source::rewind(const std::vector& sources) { const auto ids = sourceIds(sources); alSourceRewindv(ids.size(), ids); } +#endif Debug operator<<(Debug debug, const Source::State value) { switch(value) { diff --git a/src/Magnum/Audio/Source.h b/src/Magnum/Audio/Source.h index 5597fdd2a..33fe1d3e7 100644 --- a/src/Magnum/Audio/Source.h +++ b/src/Magnum/Audio/Source.h @@ -29,6 +29,7 @@ * @brief Class Magnum::Audio::Source */ +#include #include #include #include @@ -377,52 +378,90 @@ class MAGNUM_AUDIO_EXPORT Source { * * The operation is guaranteed to be done for all sources at the same * time. `nullptr` is not allowed. - * @see @ref play(), @ref pause(std::initializer_list), - * @ref stop(std::initializer_list), - * @ref rewind(std::initializer_list), + * @see @ref play(), @ref pause(std::initializer_list>), + * @ref stop(std::initializer_list>), + * @ref rewind(std::initializer_list>), * @fn_al{SourcePlayv} */ - static void play(std::initializer_list sources); - static void play(const std::vector& sources); /**< @overload */ + static void play(std::initializer_list> sources); + static void play(const std::vector>& sources); /**< @overload */ + + #ifdef MAGNUM_BUILD_DEPRECATED + /** + * @copybrief play(const std::vector>&) + * @deprecated Use @ref Magnum::Audio::Source::play(const std::>&) "play(const std::vector>&)" instead. + */ + static CORRADE_DEPRECATED("use play(const std::vector>&) instead") void play(const std::vector& sources); + #endif /** * @brief Pause more sources at once * * The operation is guaranteed to be done for all sources at the same - * time. `nullptr` is not allowed. - * @see @ref pause(), @ref play(std::initializer_list), - * @ref stop(std::initializer_list), - * @ref rewind(std::initializer_list), + * time. + * @see @ref pause(), @ref play(std::initializer_list>), + * @ref stop(std::initializer_list>), + * @ref rewind(std::initializer_list>), * @fn_al{SourcePausev} */ - static void pause(std::initializer_list sources); - static void pause(const std::vector& sources); /**< @overload */ + static void pause(std::initializer_list> sources); + static void pause(const std::vector>& sources); /**< @overload */ + + #ifdef MAGNUM_BUILD_DEPRECATED + /** + * @copybrief pause(const std::vector>&) + * @deprecated Use @ref Magnum::Audio::Source::pause(const std::>&) "pause(const std::vector>&)" instead. + */ + static CORRADE_DEPRECATED("use pause(const std::vector>&) instead") void pause(const std::vector& sources); + #endif /** * @brief Stop more sources at once * * The operation is guaranteed to be done for all sources at the same - * time. `nullptr` is not allowed. - * @see @ref stop(), @ref play(std::initializer_list), - * @ref pause(std::initializer_list), - * @ref rewind(std::initializer_list), + * time. + * @see @ref stop(), @ref play(std::initializer_list>), + * @ref pause(std::initializer_list>), + * @ref rewind(std::initializer_list>), * @fn_al{SourceStopv} */ - static void stop(std::initializer_list sources); - static void stop(const std::vector& sources); /**< @overload */ + static void stop(std::initializer_list> sources); + static void stop(const std::vector>& sources); /**< @overload */ + + #ifdef MAGNUM_BUILD_DEPRECATED + /** + * @copybrief stop(const std::vector>&) + * @deprecated Use @ref Magnum::Audio::Source::stop(const std::>&) "stop(const std::vector>&)" instead. + */ + static CORRADE_DEPRECATED("use stop(const std::vector>&) instead") void stop(const std::vector& sources); + #endif /** * @brief Rewind more sources at once * * The operation is guaranteed to be done for all sources at the same - * time. `nullptr` is not allowed. - * @see @ref rewind(), @ref play(std::initializer_list), - * @ref pause(std::initializer_list), - * @ref stop(std::initializer_list), + * time. + * @see @ref rewind(), @ref play(std::initializer_list>), + * @ref pause(std::initializer_list>), + * @ref stop(std::initializer_list>), * @fn_al{SourceRewindv} */ - static void rewind(std::initializer_list sources); - static void rewind(const std::vector& sources); /**< @overload */ + static void rewind(std::initializer_list> sources); + static void rewind(const std::vector>& sources); /**< @overload */ + + #ifdef MAGNUM_BUILD_DEPRECATED + /** + * @copybrief rewind(std::initializer_list>) + * @deprecated Use @ref Magnum::Audio::Source::rewind(std::initializer_list>) "rewind(std::initializer_list>)" instead. + */ + static CORRADE_DEPRECATED("use rewind(std::initializer_list>) instead") void rewind(std::initializer_list sources); + + /** + * @copybrief rewind(const std::vector>&) + * @deprecated Use @ref Magnum::Audio::Source::rewind(const std::>&) "rewind(const std::vector>&)" instead. + */ + static CORRADE_DEPRECATED("use rewind(const std::vector>&) instead") void rewind(const std::vector& sources); + #endif /** * @brief State @@ -435,32 +474,36 @@ class MAGNUM_AUDIO_EXPORT Source { /** * @brief Play * - * @see @ref play(std::initializer_list), @ref state(), - * @ref pause(), @ref stop(), @ref rewind(), @fn_al{SourcePlay} + * @see @ref play(std::initializer_list>), + * @ref state(), @ref pause(), @ref stop(), @ref rewind(), + * @fn_al{SourcePlay} */ void play() { alSourcePlay(_id); } /** * @brief Pause * - * @see @ref pause(std::initializer_list), @ref state(), - * @ref play(), @ref stop(), @ref rewind(), @fn_al{SourcePause} + * @see @ref pause(std::initializer_list>), + * @ref state(), @ref play(), @ref stop(), @ref rewind(), + * @fn_al{SourcePause} */ void pause() { alSourcePause(_id); } /** * @brief Stop * - * @see @ref stop(std::initializer_list), @ref state(), - * @ref play(), @ref pause(), @ref rewind(), @fn_al{SourceStop} + * @see @ref stop(std::initializer_list>), + * @ref state(), @ref play(), @ref pause(), @ref rewind(), + * @fn_al{SourceStop} */ void stop() { alSourceStop(_id); } /** * @brief Rewind * - * @see @ref rewind(std::initializer_list), @ref state(), - * @ref play(), @ref pause(), @ref stop(), @fn_al{SourceRewind} + * @see @ref rewind(std::initializer_list>), + * @ref state(), @ref play(), @ref pause(), @ref stop(), + * @fn_al{SourceRewind} */ void rewind() { alSourceRewind(_id); }