diff options
author | swarmer <swarmer@yandex-team.ru> | 2022-02-10 16:46:31 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:46:31 +0300 |
commit | 11a24635da4c4f39428b182c49a7bc35e47c9534 (patch) | |
tree | 1a2c5ffcf89eb53ecd79dbc9bc0a195c27404d0c /tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp | |
parent | 317da38588b7898a99fd9168571408123350012b (diff) | |
download | ydb-11a24635da4c4f39428b182c49a7bc35e47c9534.tar.gz |
Restoring authorship annotation for <swarmer@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp')
-rw-r--r-- | tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp | 192 |
1 files changed, 96 insertions, 96 deletions
diff --git a/tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp b/tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp index 80a38fab91..73d38b396a 100644 --- a/tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp +++ b/tools/enum_parser/enum_serialization_runtime/enum_runtime.cpp @@ -1,100 +1,100 @@ -#include "enum_runtime.h" - -#include <util/generic/map.h> -#include <util/generic/yexception.h> -#include <util/stream/output.h> - -namespace NEnumSerializationRuntime { - template <typename TEnumRepresentationType> - [[noreturn]] static void ThrowUndefinedValueException(const TEnumRepresentationType key, const TStringBuf className) { - throw yexception() << "Undefined value " << key << " in " << className << ". "; - } - - template <typename TEnumRepresentationType> - const TString& TEnumDescriptionBase<TEnumRepresentationType>::ToString(TRepresentationType key) const { - const auto it = Names.find(key); - if (Y_LIKELY(it != Names.end())) { - return it->second; - } - ThrowUndefinedValueException(key, ClassName); - } - - template <typename TEnumRepresentationType> - std::pair<bool, TEnumRepresentationType> TEnumDescriptionBase<TEnumRepresentationType>::TryFromString(const TStringBuf name) const { - const auto it = Values.find(name); - if (it != Values.end()) { - return {true, it->second}; - } - return {false, TRepresentationType()}; - } - - [[noreturn]] static void ThrowUndefinedNameException(const TStringBuf name, const TStringBuf className, const TStringBuf allEnumNames) { - ythrow yexception() << "Key '" << name << "' not found in enum " << className << ". Valid options are: " << allEnumNames << ". "; - } - - template <typename TEnumRepresentationType> - auto TEnumDescriptionBase<TEnumRepresentationType>::FromString(const TStringBuf name) const -> TRepresentationType { - const auto findResult = TryFromString(name); - if (Y_LIKELY(findResult.first)) { - return findResult.second; - } - ThrowUndefinedNameException(name, ClassName, AllEnumNames()); - } - - template <typename TEnumRepresentationType> - void TEnumDescriptionBase<TEnumRepresentationType>::Out(IOutputStream* os, const TRepresentationType key) const { - (*os) << this->ToString(key); - } - - template <typename TEnumRepresentationType> - TEnumDescriptionBase<TEnumRepresentationType>::TEnumDescriptionBase(const TInitializationData& enumInitData) - : ClassName(enumInitData.ClassName) - { - const TArrayRef<const TEnumStringPair>& namesInitializer = enumInitData.NamesInitializer; - const TArrayRef<const TEnumStringPair>& valuesInitializer = enumInitData.ValuesInitializer; - const TArrayRef<const TStringBuf>& cppNamesInitializer = enumInitData.CppNamesInitializer; - - TMap<TRepresentationType, TString> mapValueToName; - TMap<TString, TRepresentationType> mapNameToValue; +#include "enum_runtime.h" + +#include <util/generic/map.h> +#include <util/generic/yexception.h> +#include <util/stream/output.h> + +namespace NEnumSerializationRuntime { + template <typename TEnumRepresentationType> + [[noreturn]] static void ThrowUndefinedValueException(const TEnumRepresentationType key, const TStringBuf className) { + throw yexception() << "Undefined value " << key << " in " << className << ". "; + } + + template <typename TEnumRepresentationType> + const TString& TEnumDescriptionBase<TEnumRepresentationType>::ToString(TRepresentationType key) const { + const auto it = Names.find(key); + if (Y_LIKELY(it != Names.end())) { + return it->second; + } + ThrowUndefinedValueException(key, ClassName); + } + + template <typename TEnumRepresentationType> + std::pair<bool, TEnumRepresentationType> TEnumDescriptionBase<TEnumRepresentationType>::TryFromString(const TStringBuf name) const { + const auto it = Values.find(name); + if (it != Values.end()) { + return {true, it->second}; + } + return {false, TRepresentationType()}; + } + + [[noreturn]] static void ThrowUndefinedNameException(const TStringBuf name, const TStringBuf className, const TStringBuf allEnumNames) { + ythrow yexception() << "Key '" << name << "' not found in enum " << className << ". Valid options are: " << allEnumNames << ". "; + } + + template <typename TEnumRepresentationType> + auto TEnumDescriptionBase<TEnumRepresentationType>::FromString(const TStringBuf name) const -> TRepresentationType { + const auto findResult = TryFromString(name); + if (Y_LIKELY(findResult.first)) { + return findResult.second; + } + ThrowUndefinedNameException(name, ClassName, AllEnumNames()); + } + + template <typename TEnumRepresentationType> + void TEnumDescriptionBase<TEnumRepresentationType>::Out(IOutputStream* os, const TRepresentationType key) const { + (*os) << this->ToString(key); + } + + template <typename TEnumRepresentationType> + TEnumDescriptionBase<TEnumRepresentationType>::TEnumDescriptionBase(const TInitializationData& enumInitData) + : ClassName(enumInitData.ClassName) + { + const TArrayRef<const TEnumStringPair>& namesInitializer = enumInitData.NamesInitializer; + const TArrayRef<const TEnumStringPair>& valuesInitializer = enumInitData.ValuesInitializer; + const TArrayRef<const TStringBuf>& cppNamesInitializer = enumInitData.CppNamesInitializer; + + TMap<TRepresentationType, TString> mapValueToName; + TMap<TString, TRepresentationType> mapNameToValue; const bool bijectiveHint = (namesInitializer.data() == valuesInitializer.data() && namesInitializer.size() == valuesInitializer.size()); - if (bijectiveHint) { - for (const TEnumStringPair& it : namesInitializer) { - TString name{it.Name}; - mapValueToName.emplace(it.Key, name); - mapNameToValue.emplace(std::move(name), it.Key); - } - } else { - for (const TEnumStringPair& it : namesInitializer) { + if (bijectiveHint) { + for (const TEnumStringPair& it : namesInitializer) { + TString name{it.Name}; + mapValueToName.emplace(it.Key, name); + mapNameToValue.emplace(std::move(name), it.Key); + } + } else { + for (const TEnumStringPair& it : namesInitializer) { mapValueToName.emplace(it.Key, TString(it.Name)); - } - for (const TEnumStringPair& it : valuesInitializer) { + } + for (const TEnumStringPair& it : valuesInitializer) { mapNameToValue.emplace(TString(it.Name), it.Key); - } - } - Names = std::move(mapValueToName); - Values = std::move(mapNameToValue); - - AllValues.reserve(Names.size()); - for (const auto& it : Names) { + } + } + Names = std::move(mapValueToName); + Values = std::move(mapNameToValue); + + AllValues.reserve(Names.size()); + for (const auto& it : Names) { if (!AllNames.empty()) { - AllNames += ", "; - } - AllNames += TString::Join('\'', it.second, '\''); - AllValues.push_back(it.first); - } - - AllCppNames.reserve(cppNamesInitializer.size()); - for (const auto& cn : cppNamesInitializer) { - AllCppNames.push_back(TString::Join(enumInitData.CppNamesPrefix, cn)); - } - } - - template <typename TEnumRepresentationType> - TEnumDescriptionBase<TEnumRepresentationType>::~TEnumDescriptionBase() = default; - - // explicit instantiation - template class TEnumDescriptionBase<int>; - template class TEnumDescriptionBase<unsigned>; - template class TEnumDescriptionBase<long long>; - template class TEnumDescriptionBase<unsigned long long>; -} + AllNames += ", "; + } + AllNames += TString::Join('\'', it.second, '\''); + AllValues.push_back(it.first); + } + + AllCppNames.reserve(cppNamesInitializer.size()); + for (const auto& cn : cppNamesInitializer) { + AllCppNames.push_back(TString::Join(enumInitData.CppNamesPrefix, cn)); + } + } + + template <typename TEnumRepresentationType> + TEnumDescriptionBase<TEnumRepresentationType>::~TEnumDescriptionBase() = default; + + // explicit instantiation + template class TEnumDescriptionBase<int>; + template class TEnumDescriptionBase<unsigned>; + template class TEnumDescriptionBase<long long>; + template class TEnumDescriptionBase<unsigned long long>; +} |