8 #ifndef TurtleBrains_Defines_hpp
9 #define TurtleBrains_Defines_hpp
12 #include <type_traits>
14 #include <turtle_brains/core/tb_configuration.hpp>
15 #include <turtle_brains/core/tb_error.hpp>
25 #define tb_unused(parameter) ((void)parameter);
37 template<
typename Type>
void SafeDelete(Type*& objectPointer) {
if (
nullptr != objectPointer) {
delete objectPointer; objectPointer =
nullptr; } }
43 template<
typename Type>
void SafeDeleteArray(Type*& arrayPointer) {
if (
nullptr != arrayPointer) {
delete[] arrayPointer; arrayPointer =
nullptr; } }
54 template<
typename ReturnType,
typename InitialType> ReturnType
RangedCast(
const InitialType& value)
56 #if defined(tb_visual_cpp)
76 #pragma warning(disable: 4127)
77 #pragma warning(disable: 4018)
78 #pragma warning(disable: 4244)
79 #pragma warning(disable: 4267)
80 #elif defined(__GNUC__)
81 #pragma GCC diagnostic push
82 #pragma GCC diagnostic ignored "-Wsign-compare"
90 tb_static_error_if(
false == std::is_trivial<ReturnType>::value,
"Expected ReturnType to be a trivial/integral/float type.");
92 if ((std::is_signed<ReturnType>::value == std::is_signed<InitialType>::value))
94 tb_error_if(value < std::numeric_limits<ReturnType>::min() || value > std::numeric_limits<ReturnType>::max(),
95 "tbCastingError: Value is outside the range of the following cast.");
97 else if (std::is_signed<InitialType>::value)
99 tb_error_if(value < 0,
"tbCastingError: Signed value is less than 0 going to unsigned-value.");
102 return static_cast<ReturnType
>(value);
103 #if defined(tb_visual_cpp)
105 #elif defined(__GNUC__)
106 #pragma GCC diagnostic pop
121 template<
typename ReturnType,
typename InitialType> ReturnType
ClampedCast(
const InitialType& value,
const ReturnType& minimum,
const ReturnType& maximum)
123 tb_error_if(minimum > maximum,
"tbError: Minimum should never be larger than Maximum.");
124 ReturnType unclamped = RangedCast<ReturnType>(value);
125 if (unclamped < minimum)
129 if (unclamped > maximum)
#define tb_static_error_if(errorTest, message)
Definition: tb_error.hpp:51
#define tb_error_if(errorTest, message,...)
Definition: tb_error.hpp:42
Contains core functionality for each component of the API.
Definition: tb_debug_logger.hpp:125
ReturnType ClampedCast(const InitialType &value, const ReturnType &minimum, const ReturnType &maximum)
Definition: tb_defines.hpp:121
ReturnType RangedCast(const InitialType &value)
Definition: tb_defines.hpp:54
void SafeDelete(Type *&objectPointer)
Definition: tb_defines.hpp:37
void SafeDeleteArray(Type *&arrayPointer)
Definition: tb_defines.hpp:43