|
@@ -8,23 +8,26 @@ namespace NUnifiedAgent {
|
|
using TEnumNames = TVector<const TString*>;
|
|
using TEnumNames = TVector<const TString*>;
|
|
|
|
|
|
template <typename TEnum>
|
|
template <typename TEnum>
|
|
- TEnumNames BuildEnumNames() {
|
|
|
|
|
|
+ TEnumNames* BuildEnumNames() {
|
|
const auto names = GetEnumNames<TEnum>();
|
|
const auto names = GetEnumNames<TEnum>();
|
|
- auto result = TEnumNames(names.size());
|
|
|
|
|
|
+ TEnumNames* result = new TEnumNames(names.size());
|
|
size_t index = 0;
|
|
size_t index = 0;
|
|
for (const auto& p: names) {
|
|
for (const auto& p: names) {
|
|
Y_VERIFY(static_cast<size_t>(p.first) == index);
|
|
Y_VERIFY(static_cast<size_t>(p.first) == index);
|
|
- result[index++] = &p.second;
|
|
|
|
|
|
+ (*result)[index++] = &p.second;
|
|
}
|
|
}
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
template <typename TEnum>
|
|
template <typename TEnum>
|
|
- inline const auto EnumNames = BuildEnumNames<TEnum>();
|
|
|
|
|
|
+ const TEnumNames& EnumNamesVec() {
|
|
|
|
+ static const TEnumNames* EnumNames = BuildEnumNames<TEnum>();
|
|
|
|
+ return *EnumNames;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
template <typename TEnum, typename = std::enable_if_t<std::is_enum_v<TEnum>>>
|
|
template <typename TEnum, typename = std::enable_if_t<std::is_enum_v<TEnum>>>
|
|
inline const TString& NameOf(TEnum val) noexcept {
|
|
inline const TString& NameOf(TEnum val) noexcept {
|
|
- return *NPrivate::EnumNames<TEnum>[static_cast<size_t>(val)];
|
|
|
|
|
|
+ return *NPrivate::EnumNamesVec<TEnum>()[static_cast<size_t>(val)];
|
|
}
|
|
}
|
|
}
|
|
}
|