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> template <size_t S, typename T>
void struct util::debug::validator<vector<S,T>> {
util::vector<S,T>::sanity (void) const static bool
is_valid (vector<S,T> const& val)
{ {
CHECK (std::all_of (std::begin (this->data), return std::all_of (
std::end (this->data), std::begin (val.data),
[] (T i) { return !std::isnan (i); })); 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) \ #define INSTANTIATE_S_T(S,T) \
template struct util::vector<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>&); template const json::tree::node& util::operator>> (const json::tree::node&, util::vector<S,T>&);

View File

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