dynamic::create_map, dynamic::create_list

This commit is contained in:
MihailRis 2024-05-09 20:30:14 +03:00
parent 7270e0ba24
commit debdec1dc2
6 changed files with 27 additions and 9 deletions

View File

@ -92,7 +92,7 @@ void ContentLoader::fixPackIndices() {
if (fs::is_regular_file(indexFile)) {
root = files::read_json(indexFile);
} else {
root = std::make_shared<dynamic::Map>();
root = dynamic::create_map();
}
bool modified = false;

View File

@ -77,13 +77,13 @@ List& List::put(const Value& value) {
}
List& List::putList() {
auto arr = std::make_shared<List>();
auto arr = create_list();
put(arr);
return *arr;
}
Map& List::putMap() {
auto map = std::make_shared<Map>();
auto map = create_map();
put(map);
return *map;
}
@ -209,13 +209,13 @@ void Map::remove(const std::string& key) {
}
List& Map::putList(std::string key) {
auto arr = std::make_shared<List>();
auto arr = create_list();
put(key, arr);
return *arr;
}
Map& Map::putMap(std::string key) {
auto obj = std::make_shared<Map>();
auto obj = create_map();
put(key, obj);
return *obj;
}
@ -227,3 +227,11 @@ bool Map::has(const std::string& key) const {
size_t Map::size() const {
return values.size();
}
List_sptr dynamic::create_list(std::initializer_list<Value> values) {
return std::make_shared<List>(values);
}
Map_sptr dynamic::create_map(std::initializer_list<std::pair<const std::string, Value>> entries) {
return std::make_shared<Map>(entries);
}

View File

@ -35,10 +35,16 @@ namespace dynamic {
integer_t
>;
List_sptr create_list(std::initializer_list<Value> values={});
Map_sptr create_map(std::initializer_list<std::pair<const std::string, Value>> entries={});
class List {
public:
std::vector<Value> values;
List() {}
List(std::vector<Value> values) : values(std::move(values)) {}
std::string str(size_t index) const;
number_t num(size_t index) const;
integer_t integer(size_t index) const;
@ -74,6 +80,10 @@ namespace dynamic {
public:
std::unordered_map<std::string, Value> values;
Map() {}
Map(std::unordered_map<std::string, Value> values)
: values(std::move(values)) {};
template<typename T>
T get(const std::string& key) const {
if (!has(key)) {

View File

@ -45,7 +45,7 @@ gui::page_loader_func menus::create_page_loader(Engine* engine) {
auto argstr = query.substr(index+1);
name = query.substr(0, index);
auto map = std::make_shared<Map>();
auto map = create_map();
auto filename = "query for "+name;
BasicParser parser(filename, argstr);
while (parser.hasNext()) {

View File

@ -72,7 +72,7 @@ static void show_content_missing(
std::shared_ptr<ContentLUT> lut
) {
using namespace dynamic;
auto root = std::make_shared<Map>();
auto root = create_map();
auto& contentEntries = root->putList("content");
for (auto& entry : lut->getMissingContent()) {
std::string contentName = contenttype_name(entry.type);

View File

@ -327,7 +327,7 @@ dynamic::Value lua::LuaState::tovalue(int idx) {
int len = lua_objlen(L, idx);
if (len) {
// array
auto list = std::make_shared<List>();
auto list = create_list();
for (int i = 1; i <= len; i++) {
lua_rawgeti(L, idx, i);
list->put(tovalue(-1));
@ -336,7 +336,7 @@ dynamic::Value lua::LuaState::tovalue(int idx) {
return list;
} else {
// table
auto map = std::make_shared<Map>();
auto map = create_map();
lua_pushvalue(L, idx);
lua_pushnil(L);
while (lua_next(L, -2)) {