aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2018-11-22 22:53:22 -0800
committerChris Robinson <[email protected]>2018-11-22 22:53:22 -0800
commit438e626993fe86831b666a42b5f90731d5c26aeb (patch)
tree9fb4dc49e8dc1d5bc43a7f4e8c3986db4ec4f972
parent976e49711b47d6c742995986e976275badb5c9f0 (diff)
Avoid a couple explicit loops
-rw-r--r--Alc/panning.cpp37
-rw-r--r--OpenAL32/Include/alMain.h13
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 <vector>
#include <string>
#include <chrono>
+#include <algorithm>
#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