mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-22 21:36:11 +01:00
Move some compile-time dispatch to runtime
The runtime performance is likely to be negligible, but compile times need every improvement they can get.
This commit is contained in:
parent
feca97dfde
commit
85e14c5fb5
@ -204,6 +204,7 @@ set(IMPL_SOURCES
|
|||||||
${HEADER_DIR}/internal/catch_context.cpp
|
${HEADER_DIR}/internal/catch_context.cpp
|
||||||
${HEADER_DIR}/internal/catch_debugger.cpp
|
${HEADER_DIR}/internal/catch_debugger.cpp
|
||||||
${HEADER_DIR}/internal/catch_errno_guard.cpp
|
${HEADER_DIR}/internal/catch_errno_guard.cpp
|
||||||
|
${HEADER_DIR}/internal/catch_evaluate.cpp
|
||||||
${HEADER_DIR}/internal/catch_exception_translator_registry.cpp
|
${HEADER_DIR}/internal/catch_exception_translator_registry.cpp
|
||||||
${HEADER_DIR}/internal/catch_fatal_condition.cpp
|
${HEADER_DIR}/internal/catch_fatal_condition.cpp
|
||||||
${HEADER_DIR}/internal/catch_list.cpp
|
${HEADER_DIR}/internal/catch_list.cpp
|
||||||
|
38
include/internal/catch_evaluate.cpp
Normal file
38
include/internal/catch_evaluate.cpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Created by Martin on 01/08/2017.
|
||||||
|
*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "catch_evaluate.hpp"
|
||||||
|
|
||||||
|
#include "catch_enforce.h"
|
||||||
|
|
||||||
|
namespace Catch {
|
||||||
|
namespace Internal {
|
||||||
|
|
||||||
|
const char* operatorName(Operator op) {
|
||||||
|
switch (op) {
|
||||||
|
case IsEqualTo:
|
||||||
|
return "==";
|
||||||
|
case IsNotEqualTo:
|
||||||
|
return "!=";
|
||||||
|
case IsLessThan:
|
||||||
|
return "<";
|
||||||
|
case IsGreaterThan:
|
||||||
|
return ">";
|
||||||
|
case IsLessThanOrEqualTo:
|
||||||
|
return "<=";
|
||||||
|
case IsGreaterThanOrEqualTo:
|
||||||
|
return ">=";
|
||||||
|
default:
|
||||||
|
CATCH_ERROR("Attempting to translate unknown operator!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// nullptr_t support based on pull request #154 from Konstantin Baumann
|
||||||
|
std::nullptr_t opCast(std::nullptr_t) { return nullptr; }
|
||||||
|
|
||||||
|
} // end of namespace Internal
|
||||||
|
} // end of namespace Catch
|
@ -28,19 +28,11 @@ namespace Internal {
|
|||||||
IsGreaterThanOrEqualTo
|
IsGreaterThanOrEqualTo
|
||||||
};
|
};
|
||||||
|
|
||||||
template<Operator Op> struct OperatorTraits { static const char* getName(){ return "*error*"; } };
|
const char* operatorName(Operator op);
|
||||||
template<> struct OperatorTraits<IsEqualTo> { static const char* getName(){ return "=="; } };
|
|
||||||
template<> struct OperatorTraits<IsNotEqualTo> { static const char* getName(){ return "!="; } };
|
|
||||||
template<> struct OperatorTraits<IsLessThan> { static const char* getName(){ return "<"; } };
|
|
||||||
template<> struct OperatorTraits<IsGreaterThan> { static const char* getName(){ return ">"; } };
|
|
||||||
template<> struct OperatorTraits<IsLessThanOrEqualTo> { static const char* getName(){ return "<="; } };
|
|
||||||
template<> struct OperatorTraits<IsGreaterThanOrEqualTo>{ static const char* getName(){ return ">="; } };
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
T& opCast(T const& t) { return const_cast<T&>(t); }
|
T& opCast(T const& t) { return const_cast<T&>(t); }
|
||||||
|
std::nullptr_t opCast(std::nullptr_t);
|
||||||
// nullptr_t support based on pull request #154 from Konstantin Baumann
|
|
||||||
inline std::nullptr_t opCast(std::nullptr_t) { return nullptr; }
|
|
||||||
|
|
||||||
|
|
||||||
// So the compare overloads can be operator agnostic we convey the operator as a template
|
// So the compare overloads can be operator agnostic we convey the operator as a template
|
||||||
|
@ -134,7 +134,7 @@ public:
|
|||||||
// 1 for negation (conditionally added later)
|
// 1 for negation (conditionally added later)
|
||||||
dest = lhs;
|
dest = lhs;
|
||||||
dest += delim;
|
dest += delim;
|
||||||
dest += Internal::OperatorTraits<Op>::getName();
|
dest += Internal::operatorName(Op);
|
||||||
dest += delim;
|
dest += delim;
|
||||||
dest += rhs;
|
dest += rhs;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user