diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-02-01 01:38:20 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-02-01 01:38:20 +0100 |
commit | a6a2a6281218688de7a74a9cd2a426aad3fe2da2 (patch) | |
tree | a8a40ab0978ebeff31321ae6d094a7ea605ee553 /src/NBT/CompoundTag.hpp | |
parent | cbe64618821a0ae9f1901ce1a4a3893d939fdc32 (diff) | |
download | MinedMap-a6a2a6281218688de7a74a9cd2a426aad3fe2da2.tar MinedMap-a6a2a6281218688de7a74a9cd2a426aad3fe2da2.zip |
More convenient tag access
Diffstat (limited to 'src/NBT/CompoundTag.hpp')
-rw-r--r-- | src/NBT/CompoundTag.hpp | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/NBT/CompoundTag.hpp b/src/NBT/CompoundTag.hpp index 99bbd94..18de1c6 100644 --- a/src/NBT/CompoundTag.hpp +++ b/src/NBT/CompoundTag.hpp @@ -39,15 +39,15 @@ class CompoundTag : public Tag { private: friend class Tag; - std::unordered_map<std::string, std::shared_ptr<Tag>> value; + std::unordered_map<std::string, std::shared_ptr<const Tag>> values; CompoundTag(Buffer *buffer) { while (true) { - std::pair<std::string, std::shared_ptr<Tag>> v = Tag::readNamedTag(buffer); + std::pair<std::string, std::shared_ptr<const Tag>> v = Tag::readNamedTag(buffer); if (v.second->getType() == Type::End) break; - value.insert(std::move(v)); + values.insert(std::move(v)); } } @@ -55,6 +55,22 @@ public: virtual Type getType() const { return Type::Compound; } + + const std::unordered_map<std::string, std::shared_ptr<const Tag>> & getValues() const { + return values; + } + + const std::shared_ptr<const Tag> & get(const std::string &key) const { + return values.at(key); + } + + template<typename... Args> const std::shared_ptr<const Tag> & get(const std::string &key, const Args &...args) const { + std::shared_ptr<const CompoundTag> tag = std::dynamic_pointer_cast<const CompoundTag>(get(key)); + if (!tag) + return std::shared_ptr<Tag>(nullptr); + + tag->get(args...); + } }; } |