From 438e626993fe86831b666a42b5f90731d5c26aeb Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Thu, 22 Nov 2018 22:53:22 -0800 Subject: Avoid a couple explicit loops --- Alc/panning.cpp | 37 ++++++++++++++++++------------------- OpenAL32/Include/alMain.h | 13 +++++-------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/Alc/panning.cpp b/Alc/panning.cpp index a67234ec..7b5a6674 100644 --- a/Alc/panning.cpp +++ b/Alc/panning.cpp @@ -219,32 +219,31 @@ static inline const char *GetLabelFromChannel(enum Channel channel) } -typedef struct ChannelMap { - enum Channel ChanName; +struct ChannelMap { + Channel ChanName; ChannelConfig Config; -} ChannelMap; +}; -static void SetChannelMap(const enum Channel devchans[MAX_OUTPUT_CHANNELS], +static void SetChannelMap(const Channel (&devchans)[MAX_OUTPUT_CHANNELS], ChannelConfig *ambicoeffs, const ChannelMap *chanmap, ALsizei count, ALsizei *outcount) { - ALsizei maxchans = 0; - ALsizei i, j; - - for(i = 0;i < count;i++) - { - ALint idx = GetChannelIndex(devchans, chanmap[i].ChanName); - if(idx < 0) + ALsizei maxchans{0}; + std::for_each(chanmap, chanmap+count, + [&maxchans,&devchans,ambicoeffs](const ChannelMap &channel) -> void { - ERR("Failed to find %s channel in device\n", - GetLabelFromChannel(chanmap[i].ChanName)); - continue; - } + ALint idx = GetChannelIndex(devchans, channel.ChanName); + if(idx < 0) + { + ERR("Failed to find %s channel in device\n", + GetLabelFromChannel(channel.ChanName)); + return; + } - maxchans = maxi(maxchans, idx+1); - for(j = 0;j < MAX_AMBI_COEFFS;j++) - ambicoeffs[idx][j] = chanmap[i].Config[j]; - } + maxchans = maxi(maxchans, idx+1); + std::copy_n(channel.Config, MAX_AMBI_COEFFS, ambicoeffs[idx]); + } + ); *outcount = mini(maxchans, MAX_OUTPUT_CHANNELS); } diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h index efec58a0..1a2f7d8d 100644 --- a/OpenAL32/Include/alMain.h +++ b/OpenAL32/Include/alMain.h @@ -20,6 +20,7 @@ #include #include #include +#include #include "AL/al.h" #include "AL/alc.h" @@ -822,15 +823,11 @@ void SetDefaultWFXChannelOrder(ALCdevice *device); const ALCchar *DevFmtTypeString(enum DevFmtType type); const ALCchar *DevFmtChannelsString(enum DevFmtChannels chans); -inline ALint GetChannelIndex(const enum Channel names[MAX_OUTPUT_CHANNELS], enum Channel chan) +inline ALint GetChannelIndex(const enum Channel (&names)[MAX_OUTPUT_CHANNELS], enum Channel chan) { - ALint i; - for(i = 0;i < MAX_OUTPUT_CHANNELS;i++) - { - if(names[i] == chan) - return i; - } - return -1; + auto iter = std::find(std::begin(names), std::end(names), chan); + if(iter == std::end(names)) return -1; + return std::distance(names, iter); } /** * GetChannelIdxByName -- cgit v1.2.3