diff --git a/common/array.h b/common/array.h index ed54cd5c876..bb7e03c4f73 100644 --- a/common/array.h +++ b/common/array.h @@ -87,10 +87,10 @@ public: * Construct an array by copying data from a regular array. */ template - Array(const T2 *data, size_type n) { + Array(const T2 *array, size_type n) { _size = n; allocCapacity(n); - uninitialized_copy(data, data + _size, _storage); + uninitialized_copy(array, array + _size, _storage); } ~Array() { @@ -123,6 +123,16 @@ public: _storage[_size].~T(); } + /** Returns a pointer to the underlying memory serving as element storage. */ + const T *data() const { + return _storage; + } + + /** Returns a pointer to the underlying memory serving as element storage. */ + T *data() { + return _storage; + } + /** Returns a reference to the first element of the array. */ T &front() { assert(_size > 0); diff --git a/test/common/array.h b/test/common/array.h index 75061628211..45be99371f6 100644 --- a/test/common/array.h +++ b/test/common/array.h @@ -353,6 +353,15 @@ class ArrayTestSuite : public CxxTest::TestSuite TS_ASSERT_EQUALS(array2.size(), (unsigned int)3); } + void test_data() { + Common::Array array; + TS_ASSERT(array.data() == nullptr); + array.resize(2); + TS_ASSERT(array.data() != nullptr); + TS_ASSERT_EQUALS(array.data(), &array.front()); + TS_ASSERT_EQUALS(array.data() + array.size() - 1, &array.back()); + } + void test_front_back_push_pop() { Common::Array container;