aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-03-01 07:25:17 +0100
committerMax Kellermann <max@duempel.org>2014-03-01 07:49:13 +0100
commit4ba7427fa0f4c8495df331829eb67b27be9c9078 (patch)
treed34390e68bcd7a26145ea308ea0ee842d637ba32
parent9dc5335e3e4e07371cfae96eca2cb5b2a93c8dd2 (diff)
downloadmpd-4ba7427fa0f4c8495df331829eb67b27be9c9078.tar.gz
mpd-4ba7427fa0f4c8495df331829eb67b27be9c9078.tar.xz
mpd-4ba7427fa0f4c8495df331829eb67b27be9c9078.zip
util/{Const,Writable}Buffer: add operator[]
-rw-r--r--src/input/TextInputStream.cxx2
-rw-r--r--src/pcm/FallbackResampler.cxx6
-rw-r--r--src/util/ConstBuffer.hxx11
-rw-r--r--src/util/WritableBuffer.hxx11
-rw-r--r--test/test_pcm_channels.cxx12
-rw-r--r--test/test_pcm_format.cxx12
-rw-r--r--test/test_pcm_volume.cxx6
7 files changed, 41 insertions, 19 deletions
diff --git a/src/input/TextInputStream.cxx b/src/input/TextInputStream.cxx
index 25b9b42fe..d7cb440b3 100644
--- a/src/input/TextInputStream.cxx
+++ b/src/input/TextInputStream.cxx
@@ -63,7 +63,7 @@ bool TextInputStream::ReadLine(std::string &line)
the current line */
dest = buffer.Write();
assert(!dest.IsEmpty());
- dest.data[0] = '\n';
+ dest[0] = '\n';
buffer.Append(1);
}
} while (p == nullptr);
diff --git a/src/pcm/FallbackResampler.cxx b/src/pcm/FallbackResampler.cxx
index d005a831c..bd3f20d86 100644
--- a/src/pcm/FallbackResampler.cxx
+++ b/src/pcm/FallbackResampler.cxx
@@ -85,7 +85,7 @@ pcm_resample_fallback(PcmBuffer &buffer,
while (dest_pos < dest_samples) {
unsigned src_pos = dest_pos * src_rate / dest_rate;
- dest_buffer[dest_pos++] = src.data[src_pos];
+ dest_buffer[dest_pos++] = src[src_pos];
}
break;
case 2:
@@ -93,8 +93,8 @@ pcm_resample_fallback(PcmBuffer &buffer,
unsigned src_pos = dest_pos * src_rate / dest_rate;
src_pos &= ~1;
- dest_buffer[dest_pos++] = src.data[src_pos];
- dest_buffer[dest_pos++] = src.data[src_pos + 1];
+ dest_buffer[dest_pos++] = src[src_pos];
+ dest_buffer[dest_pos++] = src[src_pos + 1];
}
break;
}
diff --git a/src/util/ConstBuffer.hxx b/src/util/ConstBuffer.hxx
index 7f1fa5aa6..6754cb065 100644
--- a/src/util/ConstBuffer.hxx
+++ b/src/util/ConstBuffer.hxx
@@ -143,6 +143,17 @@ struct ConstBuffer {
constexpr const_iterator cend() const {
return data + size;
}
+
+#ifdef NDEBUG
+ constexpr
+#endif
+ const T &operator[](size_type i) const {
+#ifndef NDEBUG
+ assert(i < size);
+#endif
+
+ return data[i];
+ }
};
#endif
diff --git a/src/util/WritableBuffer.hxx b/src/util/WritableBuffer.hxx
index 64e6d0c62..d13f80867 100644
--- a/src/util/WritableBuffer.hxx
+++ b/src/util/WritableBuffer.hxx
@@ -145,6 +145,17 @@ struct WritableBuffer {
constexpr const_iterator cend() const {
return data + size;
}
+
+#ifdef NDEBUG
+ constexpr
+#endif
+ T &operator[](size_type i) const {
+#ifndef NDEBUG
+ assert(i < size);
+#endif
+
+ return data[i];
+ }
};
#endif
diff --git a/test/test_pcm_channels.cxx b/test/test_pcm_channels.cxx
index 85ad0c248..a36fb39f3 100644
--- a/test/test_pcm_channels.cxx
+++ b/test/test_pcm_channels.cxx
@@ -39,7 +39,7 @@ PcmChannelsTest::TestChannels16()
CPPUNIT_ASSERT_EQUAL(N, dest.size);
for (unsigned i = 0; i < N; ++i)
CPPUNIT_ASSERT_EQUAL(int16_t((src[i * 2] + src[i * 2 + 1]) / 2),
- dest.data[i]);
+ dest[i]);
/* mono to stereo */
@@ -47,8 +47,8 @@ PcmChannelsTest::TestChannels16()
CPPUNIT_ASSERT(!dest.IsNull());
CPPUNIT_ASSERT_EQUAL(N * 4, dest.size);
for (unsigned i = 0; i < N; ++i) {
- CPPUNIT_ASSERT_EQUAL(src[i], dest.data[i * 2]);
- CPPUNIT_ASSERT_EQUAL(src[i], dest.data[i * 2 + 1]);
+ CPPUNIT_ASSERT_EQUAL(src[i], dest[i * 2]);
+ CPPUNIT_ASSERT_EQUAL(src[i], dest[i * 2 + 1]);
}
}
@@ -67,7 +67,7 @@ PcmChannelsTest::TestChannels32()
CPPUNIT_ASSERT_EQUAL(N, dest.size);
for (unsigned i = 0; i < N; ++i)
CPPUNIT_ASSERT_EQUAL(int32_t(((int64_t)src[i * 2] + (int64_t)src[i * 2 + 1]) / 2),
- dest.data[i]);
+ dest[i]);
/* mono to stereo */
@@ -75,7 +75,7 @@ PcmChannelsTest::TestChannels32()
CPPUNIT_ASSERT(!dest.IsNull());
CPPUNIT_ASSERT_EQUAL(N * 4, dest.size);
for (unsigned i = 0; i < N; ++i) {
- CPPUNIT_ASSERT_EQUAL(src[i], dest.data[i * 2]);
- CPPUNIT_ASSERT_EQUAL(src[i], dest.data[i * 2 + 1]);
+ CPPUNIT_ASSERT_EQUAL(src[i], dest[i * 2]);
+ CPPUNIT_ASSERT_EQUAL(src[i], dest[i * 2 + 1]);
}
}
diff --git a/test/test_pcm_format.cxx b/test/test_pcm_format.cxx
index 6393d484b..94c55ab16 100644
--- a/test/test_pcm_format.cxx
+++ b/test/test_pcm_format.cxx
@@ -39,7 +39,7 @@ PcmFormatTest::TestFormat8to16()
CPPUNIT_ASSERT_EQUAL(N, d.size);
for (size_t i = 0; i < N; ++i)
- CPPUNIT_ASSERT_EQUAL(int(src[i]), d.data[i] >> 8);
+ CPPUNIT_ASSERT_EQUAL(int(src[i]), d[i] >> 8);
}
void
@@ -54,7 +54,7 @@ PcmFormatTest::TestFormat16to24()
CPPUNIT_ASSERT_EQUAL(N, d.size);
for (size_t i = 0; i < N; ++i)
- CPPUNIT_ASSERT_EQUAL(int(src[i]), d.data[i] >> 8);
+ CPPUNIT_ASSERT_EQUAL(int(src[i]), d[i] >> 8);
}
void
@@ -69,7 +69,7 @@ PcmFormatTest::TestFormat16to32()
CPPUNIT_ASSERT_EQUAL(N, d.size);
for (size_t i = 0; i < N; ++i)
- CPPUNIT_ASSERT_EQUAL(int(src[i]), d.data[i] >> 16);
+ CPPUNIT_ASSERT_EQUAL(int(src[i]), d[i] >> 16);
}
void
@@ -84,8 +84,8 @@ PcmFormatTest::TestFormatFloat()
CPPUNIT_ASSERT_EQUAL(N, f.size);
for (size_t i = 0; i != f.size; ++i) {
- CPPUNIT_ASSERT(f.data[i] >= -1.);
- CPPUNIT_ASSERT(f.data[i] <= 1.);
+ CPPUNIT_ASSERT(f[i] >= -1.);
+ CPPUNIT_ASSERT(f[i] <= 1.);
}
PcmDither dither;
@@ -96,5 +96,5 @@ PcmFormatTest::TestFormatFloat()
CPPUNIT_ASSERT_EQUAL(N, d.size);
for (size_t i = 0; i < N; ++i)
- CPPUNIT_ASSERT_EQUAL(src[i], d.data[i]);
+ CPPUNIT_ASSERT_EQUAL(src[i], d[i]);
}
diff --git a/test/test_pcm_volume.cxx b/test/test_pcm_volume.cxx
index d08c7efb0..de880563d 100644
--- a/test/test_pcm_volume.cxx
+++ b/test/test_pcm_volume.cxx
@@ -61,8 +61,8 @@ TestVolume(G g=G())
const auto _dest = ConstBuffer<value_type>::FromVoid(dest);
for (unsigned i = 0; i < N; ++i) {
const auto expected = (_src[i] + 1) / 2;
- CPPUNIT_ASSERT(_dest.data[i] >= expected - 4);
- CPPUNIT_ASSERT(_dest.data[i] <= expected + 4);
+ CPPUNIT_ASSERT(_dest[i] >= expected - 4);
+ CPPUNIT_ASSERT(_dest[i] <= expected + 4);
}
pv.Close();
@@ -119,7 +119,7 @@ PcmVolumeTest::TestVolumeFloat()
const auto _dest = ConstBuffer<float>::FromVoid(dest);
for (unsigned i = 0; i < N; ++i)
- CPPUNIT_ASSERT_DOUBLES_EQUAL(_src[i] / 2, _dest.data[i], 1);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(_src[i] / 2, _dest[i], 1);
pv.Close();
}