summaryrefslogtreecommitdiffstats
path: root/src/NBT/CompoundTag.hpp
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2015-02-01 01:38:20 +0100
committerMatthias Schiffer <mschiffer@universe-factory.net>2015-02-01 01:38:20 +0100
commita6a2a6281218688de7a74a9cd2a426aad3fe2da2 (patch)
treea8a40ab0978ebeff31321ae6d094a7ea605ee553 /src/NBT/CompoundTag.hpp
parentcbe64618821a0ae9f1901ce1a4a3893d939fdc32 (diff)
downloadMinedMap-a6a2a6281218688de7a74a9cd2a426aad3fe2da2.tar
MinedMap-a6a2a6281218688de7a74a9cd2a426aad3fe2da2.zip
More convenient tag access
Diffstat (limited to 'src/NBT/CompoundTag.hpp')
-rw-r--r--src/NBT/CompoundTag.hpp22
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...);
+ }
};
}