Compare commits
2 Commits
c0a622c5e4
...
0ba9416a57
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0ba9416a57 | ||
|
|
eef2e1318c |
@ -5,14 +5,14 @@
|
|||||||
#include <catch2/catch.hpp>
|
#include <catch2/catch.hpp>
|
||||||
|
|
||||||
#ifdef NDEBUG
|
#ifdef NDEBUG
|
||||||
# undef NDEBUG
|
#undef NDEBUG
|
||||||
# define NDEBUG_WAS_SET
|
#define NDEBUG_WAS_SET
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "utility_assert.hpp"
|
#include "utility_assert.hpp"
|
||||||
|
|
||||||
#ifdef NDEBUG_WAS_SET
|
#ifdef NDEBUG_WAS_SET
|
||||||
# define NDEBUG
|
#define NDEBUG
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
@ -20,12 +20,12 @@ namespace
|
|||||||
|
|
||||||
bool assert_flag = false;
|
bool assert_flag = false;
|
||||||
|
|
||||||
void assertCallback(const char*, const int)
|
void assertCallback(const char*, const char*, const int)
|
||||||
{
|
{
|
||||||
assert_flag = true;
|
assert_flag = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}// namespace
|
||||||
|
|
||||||
TEST_CASE("Assert debug without NDEBUG gets triggered if check is false.", "[utility],[assert]")
|
TEST_CASE("Assert debug without NDEBUG gets triggered if check is false.", "[utility],[assert]")
|
||||||
{
|
{
|
||||||
|
|||||||
@ -5,14 +5,14 @@
|
|||||||
#include <catch2/catch.hpp>
|
#include <catch2/catch.hpp>
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
# define NDEBUG
|
#define NDEBUG
|
||||||
# define NDEBUG_WAS_NOT_DEFINED
|
#define NDEBUG_WAS_NOT_DEFINED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "utility_assert.hpp"
|
#include "utility_assert.hpp"
|
||||||
|
|
||||||
#ifdef NDEBUG_WAS_NOT_DEFINED
|
#ifdef NDEBUG_WAS_NOT_DEFINED
|
||||||
# undef NDEBUG
|
#undef NDEBUG
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
@ -20,12 +20,12 @@ namespace
|
|||||||
|
|
||||||
bool assert_flag = false;
|
bool assert_flag = false;
|
||||||
|
|
||||||
void assertCallback(const char*, const int)
|
void assertCallback(const char*, const char*, const int)
|
||||||
{
|
{
|
||||||
assert_flag = true;
|
assert_flag = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}// namespace
|
||||||
|
|
||||||
TEST_CASE("Assert debug with NDEBUG is a null-opt.", "[utility],[assert]")
|
TEST_CASE("Assert debug with NDEBUG is a null-opt.", "[utility],[assert]")
|
||||||
{
|
{
|
||||||
|
|||||||
@ -8,26 +8,26 @@
|
|||||||
namespace Utility::Assert::Detail
|
namespace Utility::Assert::Detail
|
||||||
{
|
{
|
||||||
|
|
||||||
void assertImpl(const bool expr, const char* file, const int line);
|
void assertImpl(const char* expression, const char* file, const int line);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
# define SKULLC_ASSERT_DEBUG(e) Utility::Assert::Detail::assertImpl(e, __FILE__, __LINE__)
|
#define SKULLC_ASSERT_DEBUG(e) (!(e) ? Utility::Assert::Detail::assertImpl(#e, __FILE__, __LINE__) : ((void) 0))
|
||||||
#else
|
#else
|
||||||
# define SKULLC_ASSERT_DEBUG(e)
|
#define SKULLC_ASSERT_DEBUG(e)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SKULLC_ASSERT_SAFE(e) Utility::Assert::Detail::assertImpl(e, __FILE__, __LINE__)
|
#define SKULLC_ASSERT_SAFE(e) (!(e) ? Utility::Assert::Detail::assertImpl(#e, __FILE__, __LINE__) : ((void) 0))
|
||||||
|
|
||||||
namespace Utility::Assert
|
namespace Utility::Assert
|
||||||
{
|
{
|
||||||
|
|
||||||
using assert_cb = void (*)(const char* file, const int line);
|
using assert_cb = void (*)(const char* expression, const char* file, const int line);
|
||||||
|
|
||||||
void setHandler(assert_cb callback);
|
void setHandler(assert_cb callback);
|
||||||
assert_cb getHandler();
|
assert_cb getHandler();
|
||||||
|
|
||||||
}
|
}// namespace Utility::Assert
|
||||||
|
|
||||||
#endif // SKULLC_UTILITY_ASSERT_HPP_
|
#endif// SKULLC_UTILITY_ASSERT_HPP_
|
||||||
|
|||||||
@ -8,8 +8,11 @@
|
|||||||
#ifndef SKULLC_UTILITY_STATICPOINTER_HPP_
|
#ifndef SKULLC_UTILITY_STATICPOINTER_HPP_
|
||||||
#define SKULLC_UTILITY_STATICPOINTER_HPP_
|
#define SKULLC_UTILITY_STATICPOINTER_HPP_
|
||||||
|
|
||||||
|
#include <new>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
#include <utility_assert.hpp>
|
||||||
|
|
||||||
namespace Utility
|
namespace Utility
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -57,6 +60,17 @@ struct StaticPointer
|
|||||||
return initialized_;
|
return initialized_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
value_type* get()
|
||||||
|
{
|
||||||
|
SKULLC_ASSERT_DEBUG(initialized_);
|
||||||
|
return reinterpret_cast<value_type*>(storage);
|
||||||
|
}
|
||||||
|
|
||||||
|
const value_type* get() const
|
||||||
|
{
|
||||||
|
SKULLC_ASSERT_DEBUG(initialized_);
|
||||||
|
return reinterpret_cast<const value_type*>(storage);
|
||||||
|
}
|
||||||
private:
|
private:
|
||||||
bool initialized_ = false;
|
bool initialized_ = false;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -9,4 +9,4 @@
|
|||||||
#define SKULLC_CONCAT(x, y) SKULLC_CONCAT_IMPL(x, y)
|
#define SKULLC_CONCAT(x, y) SKULLC_CONCAT_IMPL(x, y)
|
||||||
#define SKULLC_TAG struct SKULLC_CONCAT(SkullCTag_, __COUNTER__)
|
#define SKULLC_TAG struct SKULLC_CONCAT(SkullCTag_, __COUNTER__)
|
||||||
|
|
||||||
#endif // SKULLC_UTILITY_TAG_HPP_
|
#endif// SKULLC_UTILITY_TAG_HPP_
|
||||||
|
|||||||
@ -19,18 +19,15 @@ namespace Utility::Assert
|
|||||||
namespace Detail
|
namespace Detail
|
||||||
{
|
{
|
||||||
|
|
||||||
void assertImpl(const bool expr, const char* file, const int line)
|
void assertImpl(const char* expression, const char* file, const int line)
|
||||||
{
|
{
|
||||||
if (!expr)
|
if (INSTALLED_HANDLER)
|
||||||
{
|
INSTALLED_HANDLER(expression, file, line);
|
||||||
if (INSTALLED_HANDLER)
|
else
|
||||||
INSTALLED_HANDLER(file, line);
|
std::terminate();
|
||||||
else
|
|
||||||
std::terminate();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}// namespace Detail
|
||||||
|
|
||||||
void setHandler(assert_cb callback)
|
void setHandler(assert_cb callback)
|
||||||
{
|
{
|
||||||
@ -42,4 +39,4 @@ assert_cb getHandler()
|
|||||||
return INSTALLED_HANDLER;
|
return INSTALLED_HANDLER;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}// namespace Utility::Assert
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user