summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/tag.h3
-rw-r--r--include/tag_compound.h2
-rw-r--r--include/tag_primitive.h8
-rw-r--r--include/tag_string.h2
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;