vector: add validator specialisation

This commit is contained in:
Danny Robson 2018-04-16 15:55:11 +10:00
parent 4c5bc46ad9
commit 52fcb847c9
2 changed files with 12 additions and 9 deletions

View File

@ -86,13 +86,17 @@ template util::vector2d util::to_euler (util::vector3d);
///////////////////////////////////////////////////////////////////////////////
template <size_t S, typename T>
void
util::vector<S,T>::sanity (void) const
{
CHECK (std::all_of (std::begin (this->data),
std::end (this->data),
[] (T i) { return !std::isnan (i); }));
}
struct util::debug::validator<vector<S,T>> {
static bool
is_valid (vector<S,T> const& val)
{
return std::all_of (
std::begin (val.data),
std::end (val.data),
[] (auto v) { return !std::isnan (v); }
);
}
};
///////////////////////////////////////////////////////////////////////////////
@ -117,6 +121,7 @@ util::operator>> (const json::tree::node &node, util::vector<S,T> &v)
//-----------------------------------------------------------------------------
#define INSTANTIATE_S_T(S,T) \
template struct util::vector<S,T>; \
template struct util::debug::validator<vector<S,T>>; \
template const json::tree::node& util::operator>> (const json::tree::node&, util::vector<S,T>&);

View File

@ -56,8 +56,6 @@ namespace util {
// constants
static constexpr vector<S,T> ones (void) { return vector<S,T> {1}; }
static constexpr vector<S,T> zeros (void) { return vector<S,T> {0}; }
void sanity (void) const;
};
template <typename T>