diff options
author | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-06-01 15:35:19 +0300 |
---|---|---|
committer | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-06-01 15:35:19 +0300 |
commit | 8e7094c87fa7ad049e6ea600a5f90f1c97d683bd (patch) | |
tree | d3e66d7ea5843080db0f65be0b7752538f69a84b /tools/enum_parser/enum_serialization_runtime/enum_runtime.h | |
parent | e13a5fc9fa49c7a6508a49f29e21a15fd9dac9ec (diff) | |
download | ydb-8e7094c87fa7ad049e6ea600a5f90f1c97d683bd.tar.gz |
intermediate changes
ref:b1e863e3aa12b888b40dd5ec36411ca050a25bd8
Diffstat (limited to 'tools/enum_parser/enum_serialization_runtime/enum_runtime.h')
-rw-r--r-- | tools/enum_parser/enum_serialization_runtime/enum_runtime.h | 71 |
1 files changed, 58 insertions, 13 deletions
diff --git a/tools/enum_parser/enum_serialization_runtime/enum_runtime.h b/tools/enum_parser/enum_serialization_runtime/enum_runtime.h index 83c7a49b0a..cac142608d 100644 --- a/tools/enum_parser/enum_serialization_runtime/enum_runtime.h +++ b/tools/enum_parser/enum_serialization_runtime/enum_runtime.h @@ -1,26 +1,24 @@ #pragma once +#include "dispatch_methods.h" +#include "ordered_pairs.h" + #include <util/generic/array_ref.h> #include <util/generic/strbuf.h> #include <util/generic/string.h> #include <util/generic/vector.h> #include <util/generic/serialized_enum.h> +#include <util/stream/fwd.h> #include <utility> -class IOutputStream; - namespace NEnumSerializationRuntime { /// Stores all information about enumeration except its real type template <typename TEnumRepresentationType> class TEnumDescriptionBase { public: using TRepresentationType = TEnumRepresentationType; - - struct TEnumStringPair { - const TRepresentationType Key; - const TStringBuf Name; - }; + using TEnumStringPair = ::NEnumSerializationRuntime::TEnumStringPair<TRepresentationType>; /// Refers initialization data stored in constexpr-friendly format struct TInitializationData { @@ -36,9 +34,24 @@ namespace NEnumSerializationRuntime { ~TEnumDescriptionBase(); const TString& ToString(TRepresentationType key) const; + + TStringBuf ToStringBuf(TRepresentationType key) const; + static TStringBuf ToStringBufFullScan(const TRepresentationType key, const TInitializationData& enumInitData); + static TStringBuf ToStringBufSorted(const TRepresentationType key, const TInitializationData& enumInitData); + static TStringBuf ToStringBufDirect(const TRepresentationType key, const TInitializationData& enumInitData); + std::pair<bool, TRepresentationType> TryFromString(const TStringBuf name) const; + static std::pair<bool, TRepresentationType> TryFromStringFullScan(const TStringBuf name, const TInitializationData& enumInitData); + static std::pair<bool, TRepresentationType> TryFromStringSorted(const TStringBuf name, const TInitializationData& enumInitData); + TRepresentationType FromString(const TStringBuf name) const; + static TRepresentationType FromStringFullScan(const TStringBuf name, const TInitializationData& enumInitData); + static TRepresentationType FromStringSorted(const TStringBuf name, const TInitializationData& enumInitData); + void Out(IOutputStream* os, const TRepresentationType key) const; + static void OutFullScan(IOutputStream* os, const TRepresentationType key, const TInitializationData& enumInitData); + static void OutSorted(IOutputStream* os, const TRepresentationType key, const TInitializationData& enumInitData); + static void OutDirect(IOutputStream* os, const TRepresentationType key, const TInitializationData& enumInitData); const TString& AllEnumNames() const noexcept { return AllNames; @@ -77,6 +90,15 @@ namespace NEnumSerializationRuntime { using typename TBase::TRepresentationType; using typename TBase::TInitializationData; + private: + static bool MapFindResult(std::pair<bool, TEnumRepresentationType> findResult, EEnum& ret) { + if (findResult.first) { + ret = TCast::CastFromRepresentationType(findResult.second); + return true; + } + return false; + } + public: using TBase::TBase; @@ -85,18 +107,29 @@ namespace NEnumSerializationRuntime { } bool FromString(const TStringBuf name, EEnum& ret) const { - const auto findResult = TBase::TryFromString(name); - if (findResult.first) { - ret = TCast::CastFromRepresentationType(findResult.second); - return true; - } - return false; + return MapFindResult(TBase::TryFromString(name), ret); } EEnum FromString(const TStringBuf name) const { return TCast::CastFromRepresentationType(TBase::FromString(name)); } + static bool TryFromStringFullScan(const TStringBuf name, EEnum& ret, const TInitializationData& enumInitData) { + return MapFindResult(TBase::TryFromStringFullScan(name, enumInitData), ret); + } + + static bool TryFromStringSorted(const TStringBuf name, EEnum& ret, const TInitializationData& enumInitData) { + return MapFindResult(TBase::TryFromStringSorted(name, enumInitData), ret); + } + + static EEnum FromStringFullScan(const TStringBuf name, const TInitializationData& enumInitData) { + return TCast::CastFromRepresentationType(TBase::FromStringFullScan(name, enumInitData)); + } + + static EEnum FromStringSorted(const TStringBuf name, const TInitializationData& enumInitData) { + return TCast::CastFromRepresentationType(TBase::FromStringSorted(name, enumInitData)); + } + TMappedDictView<EEnum, TString> EnumNames() const noexcept { return {TBase::TypelessEnumNames()}; } @@ -109,6 +142,18 @@ namespace NEnumSerializationRuntime { TBase::Out(os, TCast::CastToRepresentationType(key)); } + static void OutFullScan(IOutputStream* os, const EEnum key, const TInitializationData& enumInitData) { + TBase::OutFullScan(os, TCast::CastToRepresentationType(key), enumInitData); + } + + static void OutSorted(IOutputStream* os, const EEnum key, const TInitializationData& enumInitData) { + TBase::OutSorted(os, TCast::CastToRepresentationType(key), enumInitData); + } + + static void OutDirect(IOutputStream* os, const EEnum key, const TInitializationData& enumInitData) { + TBase::OutDirect(os, TCast::CastToRepresentationType(key), enumInitData); + } + static constexpr TEnumStringPair EnumStringPair(const EEnum key, const TStringBuf name) noexcept { return {TCast::CastToRepresentationType(key), name}; } |