MCPcopy Create free account
hub / github.com/catboost/catboost / FormatEnum

Function FormatEnum

library/cpp/yt/string/enum-inl.h:87–129  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

85
86template <class T>
87void FormatEnum(TStringBuilderBase* builder, T value, bool lowerCase)
88{
89 auto formatLiteral = [&] (auto* builder, TStringBuf literal) {
90 if (lowerCase) {
91 CamelCaseToUnderscoreCase(builder, literal);
92 } else {
93 builder->AppendString(literal);
94 }
95 };
96
97 if constexpr (TEnumTraits<T>::IsBitEnum) {
98 if (None(value)) {
99 // Avoid empty string if possible.
100 if (auto optionalLiteral = TEnumTraits<T>::FindLiteralByValue(value)) {
101 formatLiteral(builder, *optionalLiteral);
102 }
103 return;
104 }
105
106 TDelimitedStringBuilderWrapper delimitedBuilder(builder, " | ");
107
108 T printedValue{};
109 for (auto currentValue : TEnumTraits<T>::GetDomainValues()) {
110 // Check if currentValue is viable and non-redunant.
111 if ((value & currentValue) == currentValue && (printedValue | currentValue) != printedValue) {
112 formatLiteral(&delimitedBuilder, *TEnumTraits<T>::FindLiteralByValue(currentValue));
113 printedValue |= currentValue;
114 }
115 }
116
117 // Handle the remainder.
118 if (printedValue != value) {
119 NYT::NDetail::FormatUnknownEnumValue(&delimitedBuilder, TEnumTraits<T>::GetTypeName(), value & ~printedValue);
120 }
121 } else {
122 if (auto optionalLiteral = TEnumTraits<T>::FindLiteralByValue(value)) {
123 formatLiteral(builder, *optionalLiteral);
124 return;
125 }
126
127 NYT::NDetail::FormatUnknownEnumValue(builder, TEnumTraits<T>::GetTypeName(), value);
128 }
129}
130
131template <class T>
132std::string FormatEnum(T value)

Callers 2

FormatValueFunction · 0.85
TESTFunction · 0.85

Calls 6

FormatUnknownEnumValueFunction · 0.85
NoneFunction · 0.50
GetTypeNameFunction · 0.50
AppendStringMethod · 0.45
FlushMethod · 0.45

Tested by

no test coverage detected