diff --git a/libs/geom/include/psemek/geom/box.hpp b/libs/geom/include/psemek/geom/box.hpp index 71f97447..6b4b6867 100644 --- a/libs/geom/include/psemek/geom/box.hpp +++ b/libs/geom/include/psemek/geom/box.hpp @@ -338,4 +338,13 @@ namespace psemek::geom return v; } + template + bool isfinite(box const & b) + { + for (std::size_t i = 0; i < N; ++i) + if (!isfinite(b[i])) + return false; + return true; + } + } diff --git a/libs/geom/include/psemek/geom/interval.hpp b/libs/geom/include/psemek/geom/interval.hpp index 77baf57b..6d805f75 100644 --- a/libs/geom/include/psemek/geom/interval.hpp +++ b/libs/geom/include/psemek/geom/interval.hpp @@ -288,4 +288,10 @@ namespace psemek::geom return expand(i, -d); } + template + bool isfinite(interval const & i) + { + return std::isfinite(i.min) && std::isfinite(i.max); + } + } diff --git a/libs/geom/include/psemek/geom/point.hpp b/libs/geom/include/psemek/geom/point.hpp index 747b26c7..258ed807 100644 --- a/libs/geom/include/psemek/geom/point.hpp +++ b/libs/geom/include/psemek/geom/point.hpp @@ -210,6 +210,15 @@ namespace psemek::geom return os; } + template + bool isfinite(point const & p) + { + for (std::size_t i = 0; i < N; ++i) + if (!std::isfinite(p[i])) + return false; + return true; + } + } namespace std diff --git a/libs/geom/include/psemek/geom/vector.hpp b/libs/geom/include/psemek/geom/vector.hpp index 123175ba..d4357a29 100644 --- a/libs/geom/include/psemek/geom/vector.hpp +++ b/libs/geom/include/psemek/geom/vector.hpp @@ -402,6 +402,15 @@ namespace psemek::geom return os; } + template + bool isfinite(vector const & v) + { + for (std::size_t i = 0; i < N; ++i) + if (!std::isfinite(v[i])) + return false; + return true; + } + } namespace std