diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/tag.h | 3 | ||||
| -rw-r--r-- | include/tag_compound.h | 2 | ||||
| -rw-r--r-- | include/tag_primitive.h | 8 | ||||
| -rw-r--r-- | include/tag_string.h | 2 |
4 files changed, 15 insertions, 0 deletions
diff --git a/include/tag.h b/include/tag.h index 29e63a9c54..acc537500f 100644 --- a/include/tag.h +++ b/include/tag.h @@ -21,6 +21,7 @@ #define TAG_H_INCLUDED #include <cstdint> +#include <memory> namespace nbt { @@ -52,6 +53,8 @@ public: ///Returns the type of the tag virtual tag_type get_type() const noexcept = 0; + virtual std::unique_ptr<tag> move_clone() && = 0; + friend bool operator==(const tag& lhs, const tag& rhs); friend bool operator!=(const tag& lhs, const tag& rhs); diff --git a/include/tag_compound.h b/include/tag_compound.h index e1d5218a9a..435fdbdff6 100644 --- a/include/tag_compound.h +++ b/include/tag_compound.h @@ -109,6 +109,8 @@ public: tag_type get_type() const noexcept override; + std::unique_ptr<tag> move_clone() && override; + private: std::map<std::string, value> tags; diff --git a/include/tag_primitive.h b/include/tag_primitive.h index bf8600c9f1..e35d462c48 100644 --- a/include/tag_primitive.h +++ b/include/tag_primitive.h @@ -53,6 +53,8 @@ public: tag_type get_type() const noexcept override; + std::unique_ptr<tag> move_clone() && override; + private: T value; @@ -110,6 +112,12 @@ tag_type tag_primitive<T>::get_type() const noexcept } template<class T> +std::unique_ptr<tag> tag_primitive<T>::move_clone() && +{ + return std::unique_ptr<tag>(new tag_primitive<T>(std::move(*this))); +} + +template<class T> bool tag_primitive<T>::equals(const tag& rhs) const { return value == static_cast<const tag_primitive<T>&>(rhs).value; diff --git a/include/tag_string.h b/include/tag_string.h index 05a2e1cb4d..456fa8ad08 100644 --- a/include/tag_string.h +++ b/include/tag_string.h @@ -47,6 +47,8 @@ public: tag_type get_type() const noexcept override; + std::unique_ptr<tag> move_clone() && override; + private: std::string value; |
