From 9ab4d0c82699064efebd8a15eebf66e3db8bf256 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Tue, 23 Jan 2018 14:57:11 -0800 Subject: [PATCH] Add const version of operator[]. --- src/core/lib/gprpp/inlined_vector.h | 9 +++++++++ test/core/gprpp/inlined_vector_test.cc | 16 ++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/core/lib/gprpp/inlined_vector.h b/src/core/lib/gprpp/inlined_vector.h index 55ba77debd6..8044c682d12 100644 --- a/src/core/lib/gprpp/inlined_vector.h +++ b/src/core/lib/gprpp/inlined_vector.h @@ -61,6 +61,15 @@ class InlinedVector { } } + const T& operator[](size_t offset) const { + assert(offset < size_); + if (offset < N) { + return *reinterpret_cast(inline_ + offset); + } else { + return dynamic_[offset - N]; + } + } + template void emplace_back(Args&&... args) { if (size_ < N) { diff --git a/test/core/gprpp/inlined_vector_test.cc b/test/core/gprpp/inlined_vector_test.cc index 8def67f9e32..83b21b80f8a 100644 --- a/test/core/gprpp/inlined_vector_test.cc +++ b/test/core/gprpp/inlined_vector_test.cc @@ -86,6 +86,22 @@ TEST(InlinedVectorTest, ClearAndRepopulate) { } } +TEST(InlinedVectorTest, ConstIndexOperator) { + const int kNumElements = 10; + InlinedVector v; + EXPECT_EQ(0, v.size()); + for (int i = 0; i < kNumElements; ++i) { + v.push_back(i); + EXPECT_EQ(i + 1, v.size()); + } + auto const_func = [kNumElements](const InlinedVector& v) { + for (int i = 0; i < kNumElements; ++i) { + EXPECT_EQ(i, v[i]); + } + }; + const_func(v); +} + } // namespace testing } // namespace grpc_core