mirror of
https://github.com/catchorg/Catch2.git
synced 2025-04-21 09:04:46 +02:00
62 lines
2.0 KiB
C++
62 lines
2.0 KiB
C++
|
|
// 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 <catch2/internal/catch_stringref.hpp>
|
|
#include <catch2/internal/catch_unique_ptr.hpp>
|
|
|
|
#include <vector>
|
|
|
|
namespace Catch {
|
|
|
|
namespace Detail {
|
|
struct EnumInfo {
|
|
StringRef m_name;
|
|
std::vector<std::pair<int, StringRef>> m_values;
|
|
|
|
~EnumInfo();
|
|
|
|
StringRef lookup( int value ) const;
|
|
};
|
|
|
|
Detail::unique_ptr<EnumInfo>
|
|
makeEnumInfo( StringRef enumName,
|
|
StringRef allValueNames,
|
|
std::vector<int> const& values );
|
|
std::vector<StringRef> parseEnums( StringRef enums );
|
|
|
|
} // namespace Detail
|
|
|
|
class EnumValuesRegistry {
|
|
std::vector<Catch::Detail::unique_ptr<Detail::EnumInfo>> m_enumInfos;
|
|
|
|
public:
|
|
Detail::EnumInfo const& registerEnum( StringRef enumName,
|
|
StringRef allEnums,
|
|
std::vector<int> const& values );
|
|
template <typename E>
|
|
Detail::EnumInfo const&
|
|
registerEnum( StringRef enumName,
|
|
StringRef allEnums,
|
|
std::initializer_list<E> values ) {
|
|
static_assert( sizeof( int ) >= sizeof( E ),
|
|
"Cannot serialize enum to int" );
|
|
std::vector<int> intValues;
|
|
intValues.reserve( values.size() );
|
|
for ( auto enumValue : values ) {
|
|
intValues.push_back( static_cast<int>( enumValue ) );
|
|
}
|
|
return registerEnum( enumName, allEnums, intValues );
|
|
}
|
|
};
|
|
|
|
} // namespace Catch
|
|
|
|
#endif // CATCH_ENUM_VALUES_REGISTRY_HPP_INCLUDED
|