summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/tag_array.h26
-rw-r--r--test/nbttest.cpp16
2 files changed, 36 insertions, 6 deletions
diff --git a/include/tag_array.h b/include/tag_array.h
index 159e432626..41ec1e573e 100644
--- a/include/tag_array.h
+++ b/include/tag_array.h
@@ -62,6 +62,11 @@ public:
///Constructs an array with the given values
tag_array(std::initializer_list<T> init);
+ tag_array(std::vector<T>&& vec);
+
+ ///Returns a reference to the vector that contains the values
+ std::vector<T>& get();
+ const std::vector<T>& get() const;
/**
* @brief Accesses a value by index with bounds checking
@@ -98,7 +103,7 @@ public:
const_iterator cbegin() const;
const_iterator cend() const;
- ///The vector that holds the values
+private:
std::vector<T> data;
};
@@ -115,6 +120,23 @@ tag_array<T>::tag_array(std::initializer_list<T> init):
{}
template<class T>
+tag_array<T>::tag_array(std::vector<T>&& vec):
+ data(std::move(vec))
+{}
+
+template<class T>
+std::vector<T>& tag_array<T>::get()
+{
+ return data;
+}
+
+template<class T>
+const std::vector<T>& tag_array<T>::get() const
+{
+ return data;
+}
+
+template<class T>
T& tag_array<T>::at(size_t i)
{
return data.at(i);
@@ -172,7 +194,7 @@ template<class T> auto tag_array<T>::cend() const -> const_iterator { return d
template<class T>
bool operator==(const tag_array<T>& lhs, const tag_array<T>& rhs)
{
- return lhs.data == rhs.data;
+ return lhs.get() == rhs.get();
}
template<class T>
diff --git a/test/nbttest.cpp b/test/nbttest.cpp
index 0ba3a1db6c..e6256fe8c5 100644
--- a/test/nbttest.cpp
+++ b/test/nbttest.cpp
@@ -283,18 +283,22 @@ void test_tag_list()
void test_tag_byte_array()
{
+ std::vector<int8_t> vec{1, 2, 127, -128};
tag_byte_array arr{1, 2, 127, -128};
ASSERT(arr.size() == 4);
ASSERT(arr.at(0) == 1 && arr[1] == 2 && arr[2] == 127 && arr.at(3) == -128);
EXPECT_EXCEPTION(arr.at(-1), std::out_of_range);
EXPECT_EXCEPTION(arr.at(4), std::out_of_range);
+ ASSERT(arr.get() == vec);
+ ASSERT(arr == tag_byte_array(std::vector<int8_t>(vec)));
+
arr.push_back(42);
+ vec.push_back(42);
ASSERT(arr.size() == 5);
- int8_t values[] = {1, 2, 127, -128, 42};
ASSERT(arr.end() - arr.begin() == int(arr.size()));
- ASSERT(std::equal(arr.begin(), arr.end(), values));
+ ASSERT(std::equal(arr.begin(), arr.end(), vec.begin()));
arr.pop_back();
arr.pop_back();
@@ -310,18 +314,22 @@ void test_tag_byte_array()
void test_tag_int_array()
{
+ std::vector<int32_t> vec{100, 200, INT32_MAX, INT32_MIN};
tag_int_array arr{100, 200, INT32_MAX, INT32_MIN};
ASSERT(arr.size() == 4);
ASSERT(arr.at(0) == 100 && arr[1] == 200 && arr[2] == INT32_MAX && arr.at(3) == INT32_MIN);
EXPECT_EXCEPTION(arr.at(-1), std::out_of_range);
EXPECT_EXCEPTION(arr.at(4), std::out_of_range);
+ ASSERT(arr.get() == vec);
+ ASSERT(arr == tag_int_array(std::vector<int32_t>(vec)));
+
arr.push_back(42);
+ vec.push_back(42);
ASSERT(arr.size() == 5);
- int32_t values[] = {100, 200, INT32_MAX, INT32_MIN, 42};
ASSERT(arr.end() - arr.begin() == int(arr.size()));
- ASSERT(std::equal(arr.begin(), arr.end(), values));
+ ASSERT(std::equal(arr.begin(), arr.end(), vec.begin()));
arr.pop_back();
arr.pop_back();