From 4ba7427fa0f4c8495df331829eb67b27be9c9078 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 1 Mar 2014 07:25:17 +0100 Subject: [PATCH] util/{Const,Writable}Buffer: add operator[] --- src/input/TextInputStream.cxx | 2 +- src/pcm/FallbackResampler.cxx | 6 +++--- src/util/ConstBuffer.hxx | 11 +++++++++++ src/util/WritableBuffer.hxx | 11 +++++++++++ test/test_pcm_channels.cxx | 12 ++++++------ test/test_pcm_format.cxx | 12 ++++++------ test/test_pcm_volume.cxx | 6 +++--- 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::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::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(); }