diff options
Diffstat (limited to 'src/NBT/Tag.cpp')
-rw-r--r-- | src/NBT/Tag.cpp | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/src/NBT/Tag.cpp b/src/NBT/Tag.cpp index fddfc4e..a2d57e3 100644 --- a/src/NBT/Tag.cpp +++ b/src/NBT/Tag.cpp @@ -46,7 +46,7 @@ namespace MinedMap { namespace NBT { -std::shared_ptr<Tag> Tag::readTag(Type type, Buffer *buffer) { +std::shared_ptr<const Tag> Tag::readTag(Type type, Buffer *buffer) { switch (type) { case Type::End: return std::shared_ptr<EndTag>(new EndTag()); @@ -89,7 +89,7 @@ std::shared_ptr<Tag> Tag::readTag(Type type, Buffer *buffer) { } } -std::pair<std::string, std::shared_ptr<Tag>> Tag::readNamedTag(Buffer *buffer) { +std::pair<std::string, std::shared_ptr<const Tag>> Tag::readNamedTag(Buffer *buffer) { Type type = static_cast<Type>(buffer->get()); if (type == Type::End) return std::make_pair("", std::shared_ptr<EndTag>(new EndTag())); @@ -101,5 +101,62 @@ std::pair<std::string, std::shared_ptr<Tag>> Tag::readNamedTag(Buffer *buffer) { return std::make_pair(name, readTag(type, buffer)); } +std::ostream& operator<<(std::ostream& os, Tag::Type type) { + switch (type) { + case Tag::Type::End: + os << "End"; + break; + + case Tag::Type::Byte: + os << "Byte"; + break; + + case Tag::Type::Short: + os << "Short"; + break; + + case Tag::Type::Int: + os << "Int"; + break; + + case Tag::Type::Long: + os << "Long"; + break; + + case Tag::Type::Float: + os << "Float"; + break; + + case Tag::Type::Double: + os << "Double"; + break; + + case Tag::Type::ByteArray: + os << "ByteArray"; + break; + + case Tag::Type::String: + os << "String"; + break; + + case Tag::Type::List: + os << "List"; + break; + + case Tag::Type::Compound: + os << "Compound"; + break; + + case Tag::Type::IntArray: + os << "IntArray"; + break; + + default: + os.setstate(std::ios_base::failbit); + } + + return os; +} + } } |