Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
nodemetadata.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5#pragma once
6
7#include <unordered_set>
8#include <map>
9#include <memory>
10#include "metadata.h"
11
12/*
13 NodeMetadata stores arbitary amounts of data for special blocks.
14 Used for furnaces, chests and signs.
15
16 There are two interaction methods: inventory menu and text input.
17 Only one can be used for a single metadata, thus only inventory OR
18 text input should exist in a metadata.
19*/
20
21class Inventory;
22class IItemDefManager;
23
25{
26public:
27 NodeMetadata(IItemDefManager *item_def_mgr);
29
30 void serialize(std::ostream &os, u8 version, bool disk=true) const;
31 void deSerialize(std::istream &is, u8 version);
32
33 void clear();
34 bool empty() const;
35
36 // The inventory
38 {
39 return m_inventory.get();
40 }
41
42 inline bool isPrivate(const std::string &name) const
43 {
44 return m_privatevars.count(name) != 0;
45 }
46
49 bool markPrivate(const std::string &name, bool set);
50
51private:
52 int countNonPrivate() const;
53
54 std::unique_ptr<Inventory> m_inventory;
55 std::unordered_set<std::string> m_privatevars;
56};
57
58
59/*
60 List of metadata of all the nodes of a block
61*/
62
63typedef std::map<v3s16, NodeMetadata *> NodeMetadataMap;
64
66{
67public:
68 NodeMetadataList(bool is_metadata_owner = true) :
69 m_is_metadata_owner(is_metadata_owner)
70 {}
71
73
74 void serialize(std::ostream &os, u8 blockver, bool disk = true,
75 bool absolute_pos = false, bool include_empty = false) const;
76 void deSerialize(std::istream &is, IItemDefManager *item_def_mgr,
77 bool absolute_pos = false);
78
79 // Add all keys in this list to the vector keys
80 std::vector<v3s16> getAllKeys();
81 // Get pointer to data
83 // Deletes data
84 void remove(v3s16 p);
85 // Deletes old data and sets a new one
86 void set(v3s16 p, NodeMetadata *d);
87 // Deletes all
88 void clear();
89
90 size_t size() const { return m_data.size(); }
91
92 NodeMetadataMap::const_iterator begin()
93 {
94 return m_data.begin();
95 }
96
97 NodeMetadataMap::const_iterator end()
98 {
99 return m_data.end();
100 }
101
102private:
103 int countNonEmpty() const;
104
107};
Definition itemdef.h:146
Definition inventory.h:277
Definition nodemetadata.h:66
std::vector< v3s16 > getAllKeys()
Definition nodemetadata.cpp:190
void set(v3s16 p, NodeMetadata *d)
Definition nodemetadata.cpp:223
void deSerialize(std::istream &is, IItemDefManager *item_def_mgr, bool absolute_pos=false)
Definition nodemetadata.cpp:137
NodeMetadataMap::const_iterator begin()
Definition nodemetadata.h:92
bool m_is_metadata_owner
Definition nodemetadata.h:105
NodeMetadataList(bool is_metadata_owner=true)
Definition nodemetadata.h:68
NodeMetadataMap m_data
Definition nodemetadata.h:106
NodeMetadata * get(v3s16 p)
Definition nodemetadata.cpp:200
size_t size() const
Definition nodemetadata.h:90
~NodeMetadataList()
Definition nodemetadata.cpp:185
void clear()
Definition nodemetadata.cpp:229
int countNonEmpty() const
Definition nodemetadata.cpp:238
NodeMetadataMap::const_iterator end()
Definition nodemetadata.h:97
void remove(v3s16 p)
Definition nodemetadata.cpp:208
void serialize(std::ostream &os, u8 blockver, bool disk=true, bool absolute_pos=false, bool include_empty=false) const
Definition nodemetadata.cpp:97
Definition nodemetadata.h:25
std::unique_ptr< Inventory > m_inventory
Definition nodemetadata.h:54
bool empty() const
Definition nodemetadata.cpp:67
int countNonPrivate() const
Definition nodemetadata.cpp:81
void clear()
Definition nodemetadata.cpp:60
Inventory * getInventory()
Definition nodemetadata.h:37
bool isPrivate(const std::string &name) const
Definition nodemetadata.h:42
std::unordered_set< std::string > m_privatevars
Definition nodemetadata.h:55
void deSerialize(std::istream &is, u8 version)
Definition nodemetadata.cpp:43
NodeMetadata(IItemDefManager *item_def_mgr)
Definition nodemetadata.cpp:19
void serialize(std::ostream &os, u8 version, bool disk=true) const
Definition nodemetadata.cpp:25
bool markPrivate(const std::string &name, bool set)
Marks a key as private.
Definition nodemetadata.cpp:73
Definition metadata.h:61
core::vector3d< s16 > v3s16
Definition irr_v3d.h:13
std::map< v3s16, NodeMetadata * > NodeMetadataMap
Definition nodemetadata.h:63
static std::string p(std::string path)
Definition test_filesys.cpp:64