diff --git a/deps/ox/src/ox/model/typenamecatcher.hpp b/deps/ox/src/ox/model/typenamecatcher.hpp index 4c5cd773..70357a78 100644 --- a/deps/ox/src/ox/model/typenamecatcher.hpp +++ b/deps/ox/src/ox/model/typenamecatcher.hpp @@ -17,76 +17,34 @@ namespace ox { -struct TypeNameCatcher { - - const char *name = ""; - int version = 0; - - constexpr TypeNameCatcher() noexcept = default; - - template - constexpr ox::Error setTypeInfo( - const char *n = T::TypeName, - int v = T::TypeVersion, - const Vector& = {}, - std::size_t = ModelFieldCount_v) noexcept { - this->name = n; - this->version = v; - return {}; - } - - - template - constexpr Error field(const char*, T*, std::size_t) noexcept { - return {}; - } - - template - constexpr Error field(const char*, T) noexcept { - return {}; - } - - template - constexpr Error fieldCString(Args&&...) noexcept { - return {}; - } - - static constexpr auto opType() noexcept { - return OpType::Reflect; - } - -}; - struct TypeInfoCatcher { - const char *name = ""; + CString name = ""; int version = 0; - constexpr TypeInfoCatcher() noexcept = default; - template - constexpr ox::Error setTypeInfo( - const char *n = T::TypeName, - int v = T::TypeVersion, - const Vector& = {}, - std::size_t = 0) noexcept { + constexpr Error setTypeInfo( + CString const n = T::TypeName, + int const v = T::TypeVersion, + Vector const& = {}, + size_t = 0) noexcept { this->name = n; this->version = v; return {}; } template - constexpr Error field(const char*, T*, std::size_t) noexcept { + constexpr Error field(CString, T*, size_t) noexcept { return {}; } template - constexpr Error field(const char*, T) noexcept { + constexpr Error field(CString, T const&) noexcept { return {}; } template - constexpr Error fieldCString(const char*, T) noexcept { + constexpr Error fieldCString(CString, T const&) noexcept { return {}; } @@ -125,14 +83,14 @@ consteval int requireModelTypeVersion() noexcept { template [[nodiscard]] constexpr Str getModelTypeName(T *val) noexcept { - TypeNameCatcher nc; + TypeInfoCatcher nc; std::ignore = model(&nc, val); return nc.name; } template [[nodiscard]] -constexpr Str getModelTypeName() noexcept { +consteval Str getModelTypeName() noexcept { std::allocator a; auto t = a.allocate(1); auto out = getModelTypeName(t); @@ -140,15 +98,15 @@ constexpr Str getModelTypeName() noexcept { return out; } -template +template [[nodiscard]] consteval auto requireModelTypeName() noexcept { constexpr auto name = getModelTypeName(); - static_assert(ox::StringView{name}.size(), "Type lacks required TypeName"); + static_assert(StringView{name}.size(), "Type lacks required TypeName"); return name; } -template +template constexpr auto ModelTypeName_v = requireModelTypeName(); template @@ -156,10 +114,10 @@ constexpr auto ModelTypeVersion_v = requireModelTypeVersion(); template constexpr auto ModelTypeId_v = [] { - constexpr auto name = ModelTypeName_v; + constexpr auto name = ModelTypeName_v; constexpr auto version = ModelTypeVersion_v; - constexpr auto versionStr = ox::sfmt>("{}", version); - return ox::sfmt>("{};{}", name, versionStr); + constexpr auto versionStr = ox::sfmt>("{}", version); + return ox::sfmt>("{};{}", name, versionStr); }(); }