Luanti 5.18.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 // Return all keys
80 std::vector<v3s16> getAllKeys() const;
81 // Get pointer to data
82 NodeMetadata *get(v3s16 p) const;
83
86 std::unique_ptr<NodeMetadata> remove(v3s16 p);
89 std::unique_ptr<NodeMetadata> set(v3s16 p, NodeMetadata *d);
92 void clear();
93
94 size_t size() const { return m_data.size(); }
95
96 NodeMetadataMap::const_iterator begin() const
97 {
98 return m_data.begin();
99 }
100
101 NodeMetadataMap::const_iterator end() const
102 {
103 return m_data.end();
104 }
105
106private:
107 int countNonEmpty() const;
108
109 // FIXME: having a single class own or not own pointers depending on a variable
110 // is not clean and prevents refactoring this to unique_ptr...
113};
Definition itemdef.h:146
Definition inventory.h:277
NodeMetadataMap::const_iterator begin() const
Definition nodemetadata.h:96
NodeMetadataMap::const_iterator end() const
Definition nodemetadata.h:101
void deSerialize(std::istream &is, IItemDefManager *item_def_mgr, bool absolute_pos=false)
Definition nodemetadata.cpp:137
std::vector< v3s16 > getAllKeys() const
Definition nodemetadata.cpp:190
NodeMetadataList(bool is_metadata_owner=true)
Definition nodemetadata.h:68
const bool m_is_metadata_owner
Definition nodemetadata.h:111
NodeMetadata * get(v3s16 p) const
Definition nodemetadata.cpp:200
NodeMetadataMap m_data
Definition nodemetadata.h:112
size_t size() const
Definition nodemetadata.h:94
~NodeMetadataList()
Definition nodemetadata.cpp:185
std::unique_ptr< NodeMetadata > set(v3s16 p, NodeMetadata *d)
Deletes old data and sets a new one.
Definition nodemetadata.cpp:225
void clear()
Deletes all entries.
Definition nodemetadata.cpp:232
int countNonEmpty() const
Definition nodemetadata.cpp:241
void serialize(std::ostream &os, u8 blockver, bool disk=true, bool absolute_pos=false, bool include_empty=false) const
Definition nodemetadata.cpp:97
std::unique_ptr< NodeMetadata > remove(v3s16 p)
Deletes data.
Definition nodemetadata.cpp:208
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:69