aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/array.h14
-rw-r--r--test/common/array.h9
2 files changed, 21 insertions, 2 deletions
diff --git a/common/array.h b/common/array.h
index ed54cd5c87..bb7e03c4f7 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<class T2>
- 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 7506162821..45be99371f 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<int> 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<int> container;