-
-
Notifications
You must be signed in to change notification settings - Fork 58
Expand file tree
/
Copy pathprops.hpp
More file actions
179 lines (151 loc) · 3.84 KB
/
Copy pathprops.hpp
File metadata and controls
179 lines (151 loc) · 3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/**
* @file liblava/engine/props.hpp
* @brief Props
* @authors Lava Block OÜ and contributors
* @copyright Copyright (c) 2018-present, MIT License
*/
#pragma once
#include "liblava/file/file_utils.hpp"
#include "liblava/file/json.hpp"
#include "liblava/frame/argh.hpp"
#include "liblava/fwd.hpp"
namespace lava {
/**
* @brief Props
*/
struct props : configurable {
/// Engine
engine* app = nullptr;
/**
* @brief Prop item
*/
struct item {
/// Map of items
using map = std::map<string, item>;
/**
* @brief Construct a new prop
* @param filename File name of prop
*/
item(string_ref filename)
: filename(filename) {}
/// File name of prop
string filename;
/// File data of prop
file_data data;
};
/**
* @brief Add a prop
* @param name Name of prop
* @param filename File name of prop
*/
void add(string_ref name,
string_ref filename);
/**
* @brief Remove a prop
* @param name Name of prop
*/
void remove(string_ref name);
/**
* @brief Install a prop (add + load)
* @param name Name of prop
* @param filename File name of prop
* @return Install was successful or failed
*/
bool install(string_ref name,
string_ref filename);
/**
* @brief Get prop data
* @param name Name of prop
* @return c_data Prop const data
*/
c_data operator()(string_ref name);
/**
* @brief Get file name of prop
* @param name Name of prop
* @return string_ref File name
*/
string_ref get_filename(string_ref name) const {
return m_map.at(name).filename;
}
/**
* @brief Set filename of prop
* @param name Name of prop
* @param filename File name
*/
void set_filename(string_ref name,
string_ref filename) {
m_map.at(name).filename = filename;
}
/**
* @brief Check if prop exists
* @param name Name of prop to check
* @return Prop exists or not
*/
bool exists(string_ref name) const {
return m_map.count(name);
}
/**
* @brief Check if prop data is empty
* @param name Name of prop
* @return Prop data is empty or not
*/
bool empty(string_ref name) const {
return m_map.at(name).data.addr == nullptr;
}
/**
* @brief Load prop data (reload if loaded)
* @param name Name of prop
* @return Load was successful or failed
*/
bool load(string_ref name);
/**
* @brief Unload prop data
* @param name Name of prop
*/
void unload(string_ref name) {
m_map.at(name).data = {};
}
/**
* @brief Load all prop data (reload if loaded)
* @return Load was successful or failed
*/
bool load_all();
/**
* @brief Unload all prop data
*/
void unload_all() {
for (auto& [name, prop] : m_map)
prop.data = {};
}
/**
* @brief Check whether all props are available
* @return All props are there or are missing (see log)
*/
bool check();
/**
* @brief Parse prop overloads
* @param cmd_line Command line arguments
*/
void parse(cmd_line cmd_line);
/**
* @brief Clear all props
*/
void clear() {
m_map.clear();
}
/**
* @brief Get all props
* @return item::map const& Map of props
*/
item::map const& get_all() const {
return m_map;
}
/// @see configurable::set_json
void set_json(json_ref j) override;
/// @see configurable::get_json
json get_json() const override;
private:
/// Map of props
item::map m_map;
};
} // namespace lava