From 703ba37394237caac7225478c5cdd1edacf95645 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Wed, 21 Jun 2023 13:17:09 +0300 Subject: [PATCH] Add geom::isfinite for some primitive types --- libs/geom/include/psemek/geom/box.hpp | 9 +++++++++ libs/geom/include/psemek/geom/interval.hpp | 6 ++++++ libs/geom/include/psemek/geom/point.hpp | 9 +++++++++ libs/geom/include/psemek/geom/vector.hpp | 9 +++++++++ 4 files changed, 33 insertions(+) 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