debug: use less complex specialistion for validator

This commit is contained in:
Danny Robson 2016-08-10 17:36:25 +10:00
parent 8f8896b0f6
commit 00eca4445b
4 changed files with 23 additions and 16 deletions

View File

@ -77,7 +77,7 @@
#define CHECK_SANITY(A) do { \
DEBUG_ONLY( \
const auto &__a = (A); \
if (!util::debug::valid (__a)) { \
if (!util::debug::is_valid (__a)) { \
_CHECK_PANIC("failed sanity test for %s, %!\n", #A, __a); \
} \
); \
@ -344,7 +344,14 @@ namespace util { namespace debug {
template <typename T>
bool valid (const T&);
struct validator {
static bool is_valid (const T&);
};
template <typename T>
bool is_valid (const T &t)
{ return validator<T>::is_valid (t); }
template <
@ -352,7 +359,7 @@ namespace util { namespace debug {
size_t S,
typename ...Args
>
struct validator {
struct validator<T<S,Args...>> {
static bool is_valid (const T<S,Args...>&);
};
@ -362,15 +369,15 @@ namespace util { namespace debug {
size_t S,
typename ...Args
>
bool valid (const T<S,Args...> &v)
{ return validator<T,S,Args...>::is_valid (v); }
bool is_valid (const T<S,Args...> &v)
{ return validator<T<S,Args...>>::is_valid (v); }
template <typename T>
void sanity (const T &t)
{
(void)t;
CHECK (valid (t));
CHECK (is_valid (t));
}
@ -381,7 +388,7 @@ namespace util { namespace debug {
void sanity (const T<Args...> &t)
{
(void)t;
CHECK (valid (t));
CHECK (is_valid (t));
}
} }

View File

@ -216,7 +216,7 @@ extent_range<S,T>::iterator::operator!= (const iterator &rhs) const
///////////////////////////////////////////////////////////////////////////////
namespace util { namespace debug {
template <size_t S, typename T>
struct validator<extent,S,T> {
struct validator<extent<S,T>> {
static bool is_valid (const extent<S,T> &e)
{
return std::all_of (std::begin (e.data),
@ -226,11 +226,11 @@ namespace util { namespace debug {
};
} }
template bool util::debug::valid (const extent<2,float>&);
template bool util::debug::valid (const extent<2,double>&);
template bool util::debug::valid (const extent<2,uint16_t>&);
template bool util::debug::valid (const extent<2,uint32_t>&);
template bool util::debug::valid (const extent<2,uint64_t>&);
template bool util::debug::is_valid (const extent<2,float>&);
template bool util::debug::is_valid (const extent<2,double>&);
template bool util::debug::is_valid (const extent<2,uint16_t>&);
template bool util::debug::is_valid (const extent<2,uint32_t>&);
template bool util::debug::is_valid (const extent<2,uint64_t>&);
//-----------------------------------------------------------------------------

View File

@ -209,7 +209,7 @@ AABB<S,T>::operator== (const AABB<S,T> rhs) const
//-----------------------------------------------------------------------------
namespace util { namespace debug {
template <size_t S, typename T>
struct validator<AABB,S,T> {
struct validator<AABB<S,T>> {
static bool is_valid (const AABB<S,T> &b)
{
for (size_t i = 0; i < S; ++i)
@ -235,7 +235,7 @@ util::geom::operator<< (std::ostream &os, util::geom::AABB<S,T> b)
//-----------------------------------------------------------------------------
#define INSTANTIATE_S_T(S,T) \
namespace util { namespace geom { template struct AABB<S,T>; } } \
template bool util::debug::valid (const AABB<S,T>&); \
template bool util::debug::is_valid (const AABB<S,T>&); \
template std::ostream& util::geom::operator<< (std::ostream&, AABB<S,T>);
#define INSTANTIATE(T) \

View File

@ -388,7 +388,7 @@ namespace util { namespace debug {
#define INSTANTIATE_S_T(S,T) \
template struct util::region<S,T>; \
template std::ostream& util::operator<< (std::ostream&, const region<S,T>&); \
template struct util::debug::validator<util::region,S,T>;
template struct util::debug::validator<util::region<S,T>>;
#define INSTANTIATE(T) \
INSTANTIATE_S_T(2,T) \