From 7e3bd6ce1cc07dab0b5f7aaf30d213af802dbd0a Mon Sep 17 00:00:00 2001 From: ljfa-ag Date: Thu, 6 Aug 2015 10:49:08 +0200 Subject: Add stream_reader::read_tag method --- include/io/stream_reader.h | 7 +++++++ src/io/stream_reader.cpp | 8 ++++++++ test/io/read_test.cpp | 9 ++++----- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/include/io/stream_reader.h b/include/io/stream_reader.h index 7d97824927..75dba6dddb 100644 --- a/include/io/stream_reader.h +++ b/include/io/stream_reader.h @@ -25,6 +25,7 @@ #include #include #include +#include namespace nbt { @@ -55,6 +56,12 @@ public: ///Returns the byte order endian::endian get_endian() const; + /** + * @brief Reads a named tag from the stream + * @throw input_error on failure + */ + std::pair> read_tag(); + /** * @brief Reads a tag of the given type without name from the stream * @throw input_error on failure diff --git a/src/io/stream_reader.cpp b/src/io/stream_reader.cpp index ff0fe183ea..541a416d83 100644 --- a/src/io/stream_reader.cpp +++ b/src/io/stream_reader.cpp @@ -39,6 +39,14 @@ endian::endian stream_reader::get_endian() const return endian; } +std::pair> stream_reader::read_tag() +{ + tag_type type = read_type(); + std::string key = read_string(); + std::unique_ptr t = read_payload(type); + return {std::move(key), std::move(t)}; +} + std::unique_ptr stream_reader::read_payload(tag_type type) { std::unique_ptr t = tag::create(type); diff --git a/test/io/read_test.cpp b/test/io/read_test.cpp index a6de378e1d..0b29483f1e 100644 --- a/test/io/read_test.cpp +++ b/test/io/read_test.cpp @@ -104,12 +104,11 @@ void test_read_bigtest() ASSERT(file); nbt::io::stream_reader reader(file); - ASSERT(reader.read_type() == tag_type::Compound); - ASSERT(reader.read_string() == "Level"); - auto tagptr = reader.read_payload(tag_type::Compound); + auto pair = reader.read_tag(); + ASSERT(pair.first == "Level"); - ASSERT(tagptr->get_type() == tag_type::Compound); - const tag_compound& comp = tagptr->as(); + ASSERT(pair.second->get_type() == tag_type::Compound); + const tag_compound& comp = pair.second->as(); ASSERT(comp.size() == 13); -- cgit 0.0.5-2-1-g0f52