mirror of
https://github.com/aimrebirth/tools.git
synced 2026-04-14 17:33:25 +00:00
Move db wrapper into mod maker.
This commit is contained in:
parent
350601666e
commit
e9fbb6e760
3 changed files with 29 additions and 19 deletions
|
|
@ -72,6 +72,28 @@ struct aim_exe_v1_06_constants {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mod_maker {
|
struct mod_maker {
|
||||||
|
struct db_wrapper {
|
||||||
|
db2::files::db2_internal m;
|
||||||
|
path fn;
|
||||||
|
int codepage{1251};
|
||||||
|
bool written{};
|
||||||
|
|
||||||
|
~db_wrapper() {
|
||||||
|
if (!written) {
|
||||||
|
write();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void write() {
|
||||||
|
m.save(fn);
|
||||||
|
written = true;
|
||||||
|
}
|
||||||
|
auto &operator[](this auto &&d, const std::string &s) {
|
||||||
|
return d.m[s];
|
||||||
|
}
|
||||||
|
auto &operator[](this auto &&d, const std::u8string &s) {
|
||||||
|
return d.m[(const char *)s.c_str()];
|
||||||
|
}
|
||||||
|
};
|
||||||
enum class file_type {
|
enum class file_type {
|
||||||
unknown,
|
unknown,
|
||||||
|
|
||||||
|
|
@ -358,7 +380,7 @@ private:
|
||||||
}
|
}
|
||||||
return backup;
|
return backup;
|
||||||
}
|
}
|
||||||
auto open_db(auto &&name, int db_codepage) {
|
db_wrapper open_db(auto &&name, int db_codepage) {
|
||||||
auto d = db2{get_data_dir() / name, db_codepage};
|
auto d = db2{get_data_dir() / name, db_codepage};
|
||||||
auto files = d.open().get_files();
|
auto files = d.open().get_files();
|
||||||
for (auto &&f : files) {
|
for (auto &&f : files) {
|
||||||
|
|
@ -368,7 +390,11 @@ private:
|
||||||
}
|
}
|
||||||
files_to_distribute.insert(f);
|
files_to_distribute.insert(f);
|
||||||
}
|
}
|
||||||
return d.open().to_map();
|
db_wrapper w;
|
||||||
|
w.m = d.open().to_map();
|
||||||
|
w.fn = d.fn;
|
||||||
|
w.codepage = d.codepage;
|
||||||
|
return w;
|
||||||
}
|
}
|
||||||
path get_hash_fn(path fn, const byte_array &data) const {
|
path get_hash_fn(path fn, const byte_array &data) const {
|
||||||
return get_mod_dir() / std::format("{:0X}.hash", get_insert_hash(fn, data));
|
return get_mod_dir() / std::format("{:0X}.hash", get_insert_hash(fn, data));
|
||||||
|
|
|
||||||
|
|
@ -179,16 +179,7 @@ struct db2 {
|
||||||
using db2_memory_value = std::variant<std::string, int, float>;
|
using db2_memory_value = std::variant<std::string, int, float>;
|
||||||
using db2_memory = std::map<std::string, std::map<std::string, std::map<std::string, db2_memory_value>>>;
|
using db2_memory = std::map<std::string, std::map<std::string, std::map<std::string, db2_memory_value>>>;
|
||||||
|
|
||||||
path fn;
|
|
||||||
int codepage{1251};
|
|
||||||
db2_memory m;
|
db2_memory m;
|
||||||
bool written{};
|
|
||||||
|
|
||||||
~db2_internal() {
|
|
||||||
if (!written) {
|
|
||||||
write();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto begin(this auto &&d) {return d.m.begin();}
|
auto begin(this auto &&d) {return d.m.begin();}
|
||||||
auto end(this auto &&d) {return d.m.end();}
|
auto end(this auto &&d) {return d.m.end();}
|
||||||
|
|
@ -215,7 +206,7 @@ struct db2 {
|
||||||
}
|
}
|
||||||
return ja;
|
return ja;
|
||||||
}
|
}
|
||||||
void save(const path &fn) {
|
void save(const path &fn, int codepage = 1251) {
|
||||||
auto s_to_char20 = [&](char20 &dst, const std::string &in, int codepage = 1251) {
|
auto s_to_char20 = [&](char20 &dst, const std::string &in, int codepage = 1251) {
|
||||||
auto s = utf8_to_dbstr(in);
|
auto s = utf8_to_dbstr(in);
|
||||||
if (s.size() + 1 > sizeof(char20)) {
|
if (s.size() + 1 > sizeof(char20)) {
|
||||||
|
|
@ -288,10 +279,6 @@ struct db2 {
|
||||||
write_file(path{fn} += ".ind", indv.d);
|
write_file(path{fn} += ".ind", indv.d);
|
||||||
write_file(path{fn} += ".dat", datv.d);
|
write_file(path{fn} += ".dat", datv.d);
|
||||||
}
|
}
|
||||||
void write() {
|
|
||||||
save(fn);
|
|
||||||
written = true;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// converts string to utf8, trims them
|
// converts string to utf8, trims them
|
||||||
|
|
@ -304,8 +291,6 @@ struct db2 {
|
||||||
};
|
};
|
||||||
|
|
||||||
db2_internal m;
|
db2_internal m;
|
||||||
m.fn = db.fn;
|
|
||||||
m.codepage = db.codepage;
|
|
||||||
auto tbl = tab_.data->tables();
|
auto tbl = tab_.data->tables();
|
||||||
for (auto &&t : tbl) {
|
for (auto &&t : tbl) {
|
||||||
auto &jt = m[prepare_string(t.name)];
|
auto &jt = m[prepare_string(t.name)];
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,6 @@ int main(int argc, char *argv[])
|
||||||
auto m = f.to_map();
|
auto m = f.to_map();
|
||||||
write_file(path{db_fn} += ".json", m.to_json().dump(1));
|
write_file(path{db_fn} += ".json", m.to_json().dump(1));
|
||||||
m.save(path{db_fn} += "new");
|
m.save(path{db_fn} += "new");
|
||||||
m.written = true;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue