diff options
| -rw-r--r-- | include/tag_array.h | 26 | ||||
| -rw-r--r-- | test/nbttest.cpp | 16 |
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(); |
