diff options
author | SmallJoker <SmallJoker@users.noreply.github.com> | 2018-12-04 20:37:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-04 20:37:48 +0100 |
commit | 3d66622772e66154b7624957a27f9be54c4c7c28 (patch) | |
tree | 7ff32e791a39d302f6d1306089b95cb23ebba838 /src/nodemetadata.h | |
parent | ae8d14b009650f0fe019301123793312406556e4 (diff) | |
download | minetest-3d66622772e66154b7624957a27f9be54c4c7c28.tar.gz minetest-3d66622772e66154b7624957a27f9be54c4c7c28.tar.bz2 minetest-3d66622772e66154b7624957a27f9be54c4c7c28.zip |
Send only changed node metadata to clients instead of whole mapblock (#5268)
Includes newer style changes and fixes by est31
Improve the block position de-serialization
Add type NodeMetadataMap
Diffstat (limited to 'src/nodemetadata.h')
-rw-r--r-- | src/nodemetadata.h | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/nodemetadata.h b/src/nodemetadata.h index 40f6dec65..c028caf88 100644 --- a/src/nodemetadata.h +++ b/src/nodemetadata.h @@ -70,13 +70,21 @@ private: List of metadata of all the nodes of a block */ +typedef std::map<v3s16, NodeMetadata *> NodeMetadataMap; + class NodeMetadataList { public: + NodeMetadataList(bool is_metadata_owner = true) : + m_is_metadata_owner(is_metadata_owner) + {} + ~NodeMetadataList(); - void serialize(std::ostream &os, u8 blockver, bool disk=true) const; - void deSerialize(std::istream &is, IItemDefManager *item_def_mgr); + void serialize(std::ostream &os, u8 blockver, bool disk = true, + bool absolute_pos = false) const; + void deSerialize(std::istream &is, IItemDefManager *item_def_mgr, + bool absolute_pos = false); // Add all keys in this list to the vector keys std::vector<v3s16> getAllKeys(); @@ -89,8 +97,21 @@ public: // Deletes all void clear(); + size_t size() const { return m_data.size(); } + + NodeMetadataMap::const_iterator begin() + { + return m_data.begin(); + } + + NodeMetadataMap::const_iterator end() + { + return m_data.end(); + } + private: int countNonEmpty() const; - std::map<v3s16, NodeMetadata *> m_data; + bool m_is_metadata_owner; + NodeMetadataMap m_data; }; |