diff options
author | swarmer <swarmer@yandex-team.ru> | 2022-06-13 01:37:00 +0300 |
---|---|---|
committer | swarmer <swarmer@yandex-team.ru> | 2022-06-13 01:37:00 +0300 |
commit | e5e7d3b69b61a7855104d9eddb0b6ff02e7a2979 (patch) | |
tree | 355a99d6e7e7cdb5c269b105f15580e2de445bca /tools/enum_parser/enum_serialization_runtime/dispatch_methods.h | |
parent | 669e8d5ef59e6f49667af117dfee9a43efbf2441 (diff) | |
download | ydb-e5e7d3b69b61a7855104d9eddb0b6ff02e7a2979.tar.gz |
[enum_parser] generate ToStringBuf specialization
IGNIETFERRO-1350
ref:bb9bb1755b6abfc5a27639daf049b8a7cd748fe4
Diffstat (limited to 'tools/enum_parser/enum_serialization_runtime/dispatch_methods.h')
-rw-r--r-- | tools/enum_parser/enum_serialization_runtime/dispatch_methods.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/tools/enum_parser/enum_serialization_runtime/dispatch_methods.h b/tools/enum_parser/enum_serialization_runtime/dispatch_methods.h index db752ae710..fa2c8aa833 100644 --- a/tools/enum_parser/enum_serialization_runtime/dispatch_methods.h +++ b/tools/enum_parser/enum_serialization_runtime/dispatch_methods.h @@ -27,6 +27,21 @@ namespace NEnumSerializationRuntime { } template <class TNameBufs, typename EEnum> + inline TStringBuf DispatchToStringBufFn(EEnum n) { + constexpr auto order = TNameBufs::NamesOrder; + if constexpr (order >= ::NEnumSerializationRuntime::ESortOrder::DirectMapping) { + return TNameBufs::ToStringBufDirect(n, TNameBufs::EnumInitializationData); + } else if constexpr (std::size(TNameBufs::EnumInitializationData.NamesInitializer) <= LINEAR_SEARCH_KEYS_SIZE_THRESHOLD) { + return TNameBufs::ToStringBufFullScan(n, TNameBufs::EnumInitializationData); + } else if constexpr (order >= ::NEnumSerializationRuntime::ESortOrder::Ascending) { + return TNameBufs::ToStringBufSorted(n, TNameBufs::EnumInitializationData); + } else { + const TNameBufs& names = TNameBufs::Instance(); + return names.ToStringBuf(n); + } + } + + template <class TNameBufs, typename EEnum> inline EEnum DispatchFromStringImplFn(const char* data, size_t len) { const TStringBuf name{data, len}; constexpr auto order = TNameBufs::ValuesOrder; |