diff options
author | babenko <babenko@yandex-team.com> | 2024-01-25 19:09:19 +0300 |
---|---|---|
committer | babenko <babenko@yandex-team.com> | 2024-01-25 20:01:47 +0300 |
commit | 3fa3bc3d67f3e77fce7b45a7fc7608ef9a3131bb (patch) | |
tree | 8c5059e4aabe5be183a5a0b9fc851d12a086e568 /library/cpp/yt/string | |
parent | 4d0fd29627f04e0419f75981e41efb2015daf093 (diff) | |
download | ydb-3fa3bc3d67f3e77fce7b45a7fc7608ef9a3131bb.tar.gz |
Introduce TEnumIndexedArray as a refurbished version of TEnumIndexedVector
Diffstat (limited to 'library/cpp/yt/string')
-rw-r--r-- | library/cpp/yt/string/format-inl.h | 22 | ||||
-rw-r--r-- | library/cpp/yt/string/unittests/enum_ut.cpp | 1 |
2 files changed, 23 insertions, 0 deletions
diff --git a/library/cpp/yt/string/format-inl.h b/library/cpp/yt/string/format-inl.h index c379af712a..c198fdcd65 100644 --- a/library/cpp/yt/string/format-inl.h +++ b/library/cpp/yt/string/format-inl.h @@ -12,6 +12,7 @@ #include <library/cpp/yt/small_containers/compact_vector.h> #include <library/cpp/yt/misc/enum.h> +#include <library/cpp/yt/misc/enum_indexed_array.h> #include <util/system/platform.h> @@ -393,6 +394,27 @@ struct TValueFormatter<THashMultiMap<K, V>> } }; +// TEnumIndexedArray +template <class E, class T> +struct TValueFormatter<TEnumIndexedArray<E, T>> +{ + static void Do(TStringBuilderBase* builder, const TEnumIndexedArray<E, T>& collection, TStringBuf format) + { + builder->AppendChar('{'); + bool firstItem = true; + for (const auto& index : TEnumTraits<E>::GetDomainValues()) { + if (!firstItem) { + builder->AppendString(DefaultJoinToStringDelimiter); + } + FormatValue(builder, index, format); + builder->AppendString(": "); + FormatValue(builder, collection[index], format); + firstItem = false; + } + builder->AppendChar('}'); + } +}; + // TEnumIndexedVector template <class E, class T> struct TValueFormatter<TEnumIndexedVector<E, T>> diff --git a/library/cpp/yt/string/unittests/enum_ut.cpp b/library/cpp/yt/string/unittests/enum_ut.cpp index 4059b3d2e6..91a8b04500 100644 --- a/library/cpp/yt/string/unittests/enum_ut.cpp +++ b/library/cpp/yt/string/unittests/enum_ut.cpp @@ -13,6 +13,7 @@ namespace { // Some compile-time sanity checks. DEFINE_ENUM(ESample, (One)(Two)); static_assert(TFormatTraits<ESample>::HasCustomFormatValue); +static_assert(TFormatTraits<TEnumIndexedArray<ESample, int>>::HasCustomFormatValue); static_assert(TFormatTraits<TEnumIndexedVector<ESample, int>>::HasCustomFormatValue); DEFINE_ENUM(EColor, |