aboutsummaryrefslogtreecommitdiffstats
path: root/tools/enum_parser/enum_serialization_runtime/enum_runtime.h
diff options
context:
space:
mode:
authorarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-06-01 15:35:19 +0300
committerarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-06-01 15:35:19 +0300
commit8e7094c87fa7ad049e6ea600a5f90f1c97d683bd (patch)
treed3e66d7ea5843080db0f65be0b7752538f69a84b /tools/enum_parser/enum_serialization_runtime/enum_runtime.h
parente13a5fc9fa49c7a6508a49f29e21a15fd9dac9ec (diff)
downloadydb-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.h71
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};
}