aboutsummaryrefslogtreecommitdiffstats
path: root/tools/enum_parser/enum_serialization_runtime/dispatch_methods.h
diff options
context:
space:
mode:
authorswarmer <swarmer@yandex-team.ru>2022-06-13 01:37:00 +0300
committerswarmer <swarmer@yandex-team.ru>2022-06-13 01:37:00 +0300
commite5e7d3b69b61a7855104d9eddb0b6ff02e7a2979 (patch)
tree355a99d6e7e7cdb5c269b105f15580e2de445bca /tools/enum_parser/enum_serialization_runtime/dispatch_methods.h
parent669e8d5ef59e6f49667af117dfee9a43efbf2441 (diff)
downloadydb-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.h15
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;