// Copyright Catch2 Authors // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE.txt or copy at // https://www.boost.org/LICENSE_1_0.txt) // SPDX-License-Identifier: BSL-1.0 #ifndef CATCH_ENUM_VALUES_REGISTRY_HPP_INCLUDED #define CATCH_ENUM_VALUES_REGISTRY_HPP_INCLUDED #include #include #include namespace Catch { namespace Detail { struct EnumInfo { StringRef m_name; std::vector> m_values; ~EnumInfo(); StringRef lookup( int value ) const; }; Detail::unique_ptr makeEnumInfo( StringRef enumName, StringRef allValueNames, std::vector const& values ); std::vector parseEnums( StringRef enums ); } // namespace Detail class EnumValuesRegistry { std::vector> m_enumInfos; public: Detail::EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::vector const& values ); template Detail::EnumInfo const& registerEnum( StringRef enumName, StringRef allEnums, std::initializer_list values ) { static_assert( sizeof( int ) >= sizeof( E ), "Cannot serialize enum to int" ); std::vector intValues; intValues.reserve( values.size() ); for ( auto enumValue : values ) { intValues.push_back( static_cast( enumValue ) ); } return registerEnum( enumName, allEnums, intValues ); } }; } // namespace Catch #endif // CATCH_ENUM_VALUES_REGISTRY_HPP_INCLUDED