From 5cbb895bcfe11ed1d416b5e5bd6b0cfec2bb3f01 Mon Sep 17 00:00:00 2001 From: lzwdgc Date: Tue, 2 Apr 2024 12:21:03 +0300 Subject: [PATCH] Misc. --- src/common/db2.h | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/common/db2.h b/src/common/db2.h index 9375928..17e3d7a 100644 --- a/src/common/db2.h +++ b/src/common/db2.h @@ -45,6 +45,16 @@ struct mem_stream { auto &r = *(T *)p; return r; } + template + 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) { d.append_range(s.d); } @@ -63,6 +73,10 @@ struct mem_stream { auto size() const { return d.size(); } }; +decltype(auto) visit(auto &&var, auto &&...f) { + return ::std::visit(overload{FWD(f)...}, var); +} + struct db2 { using char20 = char[0x20]; @@ -145,7 +159,7 @@ struct db2 { file(auto &&base) : fn{path{base} += "."s} { fn += type_name(); - f.open(fn, primitives::templates2::mmap_file::rw{}); + f.open(fn, primitives::templates2::mmap_file::ro{}); data = (T *)f.p; } }; @@ -245,24 +259,10 @@ struct db2 { i.offset = datv.size(); for (auto &&[fn, fv] : fd) { dat::field_value_base &_ = datv; - auto sz = std::visit(overload{ - [&](const int &v) { - int &i = datv; - i = 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 sz = visit(fv, + [&](const int &v) { return datv = v; }, + [&](const float &v) { return datv = v; }, + [&](const std::string &v) { return datv = utf8_to_dbstr(v); }); auto &v = datv.at(-(sizeof(dat::field_value_base) + sz)); v.field_id = (int)fields[tn].find(fn)->second; v.size = sz;