mirror of
https://github.com/aimrebirth/tools.git
synced 2026-04-14 17:33:25 +00:00
Misc.
This commit is contained in:
parent
c2696d8ba7
commit
5cbb895bcf
1 changed files with 19 additions and 19 deletions
|
|
@ -45,6 +45,16 @@ struct mem_stream {
|
||||||
auto &r = *(T *)p;
|
auto &r = *(T *)p;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
template <typename T>
|
||||||
|
auto operator=(const T &in) {
|
||||||
|
T &v = *this;
|
||||||
|
v = in;
|
||||||
|
return sizeof(T);
|
||||||
|
}
|
||||||
|
auto operator=(const std::string &in) {
|
||||||
|
*this += in;
|
||||||
|
return in.size() + 1;
|
||||||
|
}
|
||||||
void operator+=(const mem_stream &s) {
|
void operator+=(const mem_stream &s) {
|
||||||
d.append_range(s.d);
|
d.append_range(s.d);
|
||||||
}
|
}
|
||||||
|
|
@ -63,6 +73,10 @@ struct mem_stream {
|
||||||
auto size() const { return d.size(); }
|
auto size() const { return d.size(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
decltype(auto) visit(auto &&var, auto &&...f) {
|
||||||
|
return ::std::visit(overload{FWD(f)...}, var);
|
||||||
|
}
|
||||||
|
|
||||||
struct db2 {
|
struct db2 {
|
||||||
using char20 = char[0x20];
|
using char20 = char[0x20];
|
||||||
|
|
||||||
|
|
@ -145,7 +159,7 @@ struct db2 {
|
||||||
|
|
||||||
file(auto &&base) : fn{path{base} += "."s} {
|
file(auto &&base) : fn{path{base} += "."s} {
|
||||||
fn += type_name<T>();
|
fn += type_name<T>();
|
||||||
f.open(fn, primitives::templates2::mmap_file<uint8_t>::rw{});
|
f.open(fn, primitives::templates2::mmap_file<uint8_t>::ro{});
|
||||||
data = (T *)f.p;
|
data = (T *)f.p;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -245,24 +259,10 @@ struct db2 {
|
||||||
i.offset = datv.size();
|
i.offset = datv.size();
|
||||||
for (auto &&[fn, fv] : fd) {
|
for (auto &&[fn, fv] : fd) {
|
||||||
dat::field_value_base &_ = datv;
|
dat::field_value_base &_ = datv;
|
||||||
auto sz = std::visit(overload{
|
auto sz = visit(fv,
|
||||||
[&](const int &v) {
|
[&](const int &v) { return datv = v; },
|
||||||
int &i = datv;
|
[&](const float &v) { return datv = v; },
|
||||||
i = v;
|
[&](const std::string &v) { return datv = utf8_to_dbstr(v); });
|
||||||
return sizeof(int);
|
|
||||||
},
|
|
||||||
[&](const float &v) {
|
|
||||||
float &i = datv;
|
|
||||||
i = v;
|
|
||||||
return sizeof(float);
|
|
||||||
},
|
|
||||||
[&](const std::string &v) {
|
|
||||||
auto s = utf8_to_dbstr(v);
|
|
||||||
datv += s;
|
|
||||||
return s.size() + 1;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
fv);
|
|
||||||
auto &v = datv.at<dat::field_value_base>(-(sizeof(dat::field_value_base) + sz));
|
auto &v = datv.at<dat::field_value_base>(-(sizeof(dat::field_value_base) + sz));
|
||||||
v.field_id = (int)fields[tn].find(fn)->second;
|
v.field_id = (int)fields[tn].find(fn)->second;
|
||||||
v.size = sz;
|
v.size = sz;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue