summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt3
-rw-r--r--include/value.h6
-rw-r--r--src/value.cpp60
3 files changed, 65 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0884cf2a11..1c4ab33380 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,7 +7,8 @@ add_definitions(-std=c++11)
include_directories(include)
add_library(nbt++ STATIC
src/tag_compound.cpp
- src/tag_string.cpp)
+ src/tag_string.cpp
+ src/value.cpp)
enable_testing()
add_subdirectory(test)
diff --git a/include/value.h b/include/value.h
index 21e945625a..bcad7f3468 100644
--- a/include/value.h
+++ b/include/value.h
@@ -44,15 +44,15 @@ public:
explicit value(std::unique_ptr<tag>&& t);
explicit value(tag&& t);
+ value& operator=(std::unique_ptr<tag>&& t);
+ value& operator=(tag&& t);
+
//Movable but not (implicitly) copyable
value(const value&) = delete;
value(value&&) = default;
value& operator=(const value&) = delete;
value& operator=(value&&) = default;
- value& operator=(std::unique_ptr<tag>&& t);
- value& operator=(tag&& t);
-
//Assignment of primitives and string
/**
* @brief Assigns the given value to the tag if the type matches
diff --git a/src/value.cpp b/src/value.cpp
new file mode 100644
index 0000000000..574c23d087
--- /dev/null
+++ b/src/value.cpp
@@ -0,0 +1,60 @@
+/*
+ * libnbt++ - A library for the Minecraft Named Binary Tag format.
+ * Copyright (C) 2013, 2015 ljfa-ag
+ *
+ * This file is part of libnbt++.
+ *
+ * libnbt++ is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * libnbt++ is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with libnbt++. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "value.h"
+#include "libnbt.h"
+
+namespace nbt
+{
+
+value::value(std::unique_ptr<tag>&& t):
+ tag_(std::move(t))
+{}
+
+value::value(tag&& t):
+ tag_(std::move(t).move_clone())
+{}
+
+value& value::operator=(std::unique_ptr<tag>&& t)
+{
+ tag_ = std::move(t);
+ return *this;
+}
+
+value& value::operator=(tag&& t)
+{
+ return *this = std::move(t).move_clone();
+}
+
+tag_type value::get_type() const
+{
+ return tag_->get_type();
+}
+
+bool operator==(const value& lhs, const value& rhs)
+{
+ return *lhs.tag_ == *rhs.tag_;
+}
+
+bool operator!=(const value& lhs, const value& rhs)
+{
+ return !(lhs == rhs);
+}
+
+}