summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorljfa-ag <ljfa-ag@web.de>2015-07-12 19:40:57 +0200
committerljfa-ag <ljfa-ag@web.de>2015-07-12 19:40:57 +0200
commita9c5da13649466c13a081fa35eed7261340158c1 (patch)
tree9e903ae8636de59f366cac04a7afcc405c85bbe7 /src
parent857bdd55e92b5910852d1215bf5cef43e78b5ecb (diff)
downloadProject-Tick-a9c5da13649466c13a081fa35eed7261340158c1.tar.gz
Project-Tick-a9c5da13649466c13a081fa35eed7261340158c1.zip
Implement initializer_list constructors for tag_list
Diffstat (limited to 'src')
-rw-r--r--src/tag_list.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/tag_list.cpp b/src/tag_list.cpp
index d0ae233e80..da35d19cac 100644
--- a/src/tag_list.cpp
+++ b/src/tag_list.cpp
@@ -18,6 +18,7 @@
* along with libnbt++. If not, see <http://www.gnu.org/licenses/>.
*/
#include "tag_list.h"
+#include "libnbt.h"
namespace nbt
{
@@ -30,6 +31,43 @@ tag_list::tag_list(tag_type type):
el_type_(type)
{}
+template<class T, class Arg>
+tag_list::tag_list(T dummy, std::initializer_list<Arg> init):
+ el_type_(T::type)
+{
+ tags.reserve(init.size());
+ for(const Arg& arg: init)
+ tags.emplace_back(T(arg));
+}
+
+tag_list::tag_list(std::initializer_list<int8_t> init): tag_list(tag_byte() , init) {}
+tag_list::tag_list(std::initializer_list<int16_t> init): tag_list(tag_short() , init) {}
+tag_list::tag_list(std::initializer_list<int32_t> init): tag_list(tag_int() , init) {}
+tag_list::tag_list(std::initializer_list<int64_t> init): tag_list(tag_long() , init) {}
+tag_list::tag_list(std::initializer_list<float> init): tag_list(tag_float() , init) {}
+tag_list::tag_list(std::initializer_list<double> init): tag_list(tag_double() , init) {}
+tag_list::tag_list(std::initializer_list<std::string> init): tag_list(tag_string() , init) {}
+//tag_list::tag_list(std::initializer_list<tag_byte_array> init): tag_list(tag_byte_array(), init) {}
+tag_list::tag_list(std::initializer_list<tag_list> init): tag_list(tag_list() , init) {}
+tag_list::tag_list(std::initializer_list<tag_compound> init): tag_list(tag_compound() , init) {}
+//tag_list::tag_list(std::initializer_list<tag_int_array> init): tag_list(tag_int_array() , init) {}
+
+tag_list::tag_list(std::initializer_list<value> init)
+{
+ if(init.size() == 0)
+ el_type_ = tag_type::Null;
+ else
+ {
+ el_type_ = init.begin()->get_type();
+ for(const value& val: init)
+ {
+ if(!val || val.get_type() != el_type_)
+ throw std::bad_cast();
+ }
+ tags.assign(init.begin(), init.end());
+ }
+}
+
value& tag_list::at(size_t i)
{
return tags.at(i);