From 41c0ac0fddd8bbaa9b0be7e572d0460731fb3ef8 Mon Sep 17 00:00:00 2001 From: q66 Date: Sun, 28 Jun 2015 22:16:13 +0100 Subject: [PATCH] return a pointer from the "at" methods (which is nullptr on non-existent items) --- octa/array.hh | 10 ++++++++-- octa/vector.hh | 10 ++++++++-- tests/array.cc | 4 ++-- tests/vector.cc | 4 ++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/octa/array.hh b/octa/array.hh index e06c937..a8508f1 100644 --- a/octa/array.hh +++ b/octa/array.hh @@ -29,8 +29,14 @@ struct Array { T &operator[](Size i) { return p_buf[i]; } const T &operator[](Size i) const { return p_buf[i]; } - T &at(Size i) { return p_buf[i]; } - const T &at(Size i) const { return p_buf[i]; } + T *at(Size i) { + if (!in_range(i)) return nullptr; + return &p_buf[i]; + } + const T *at(Size i) const { + if (!in_range(i)) return nullptr; + return &p_buf[i]; + } T &front() { return p_buf[0]; } const T &front() const { return p_buf[0]; } diff --git a/octa/vector.hh b/octa/vector.hh index cce4f39..f5da0c2 100644 --- a/octa/vector.hh +++ b/octa/vector.hh @@ -288,8 +288,14 @@ public: T &operator[](Size i) { return p_buf.first()[i]; } const T &operator[](Size i) const { return p_buf.first()[i]; } - T &at(Size i) { return p_buf.first()[i]; } - const T &at(Size i) const { return p_buf.first()[i]; } + T *at(Size i) { + if (!in_range(i)) return nullptr; + return &p_buf.first()[i]; + } + const T *at(Size i) const { + if (!in_range(i)) return nullptr; + return &p_buf.first()[i]; + } T &push(const T &v) { if (p_len == p_cap) reserve(p_len + 1); diff --git a/tests/array.cc b/tests/array.cc index 558f90f..66b4619 100644 --- a/tests/array.cc +++ b/tests/array.cc @@ -14,8 +14,8 @@ int main() { assert(x[0] == 2); assert(x[2] == 8); - assert(x.at(0) == x[0]); - assert(x.at(3) == x[3]); + assert(*(x.at(0)) == x[0]); + assert(*(x.at(3)) == x[3]); assert(x.size() == 5); diff --git a/tests/vector.cc b/tests/vector.cc index f6c34a1..8a7c8d6 100644 --- a/tests/vector.cc +++ b/tests/vector.cc @@ -14,8 +14,8 @@ int main() { assert(x[0] == 5); assert(x[2] == 15); - assert(x.at(0) == x[0]); - assert(x.at(3) == x[3]); + assert(*(x.at(0)) == x[0]); + assert(*(x.at(3)) == x[3]); assert(x.data()[0] == x[0]);