diff options
| author | ljfa-ag <ljfa-ag@web.de> | 2015-07-12 19:40:57 +0200 |
|---|---|---|
| committer | ljfa-ag <ljfa-ag@web.de> | 2015-07-12 19:40:57 +0200 |
| commit | a9c5da13649466c13a081fa35eed7261340158c1 (patch) | |
| tree | 9e903ae8636de59f366cac04a7afcc405c85bbe7 /src | |
| parent | 857bdd55e92b5910852d1215bf5cef43e78b5ecb (diff) | |
| download | Project-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.cpp | 38 |
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); |
