From 9da25631a119fd16f1810a027dae1fde7cb7527d Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Fri, 7 Mar 2025 20:23:53 +0000 Subject: AxisAlignedBoundingBox construct from range instead of span --- gfx/aabb.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'gfx/aabb.h') diff --git a/gfx/aabb.h b/gfx/aabb.h index db3a215..229d516 100644 --- a/gfx/aabb.h +++ b/gfx/aabb.h @@ -1,7 +1,8 @@ #pragma once #include "config/types.h" -#include +#include +#include class AxisAlignedBoundingBox { public: @@ -13,7 +14,18 @@ public: AxisAlignedBoundingBox operator-(const GlobalPosition3D & viewPoint) const; - [[nodiscard]] static AxisAlignedBoundingBox fromPoints(std::span points); + [[nodiscard]] static AxisAlignedBoundingBox + fromPoints(auto && points) + { + using Limits = std::numeric_limits; + static constexpr const auto INITIAL + = std::make_pair(GlobalPosition3D {Limits::max()}, GlobalPosition3D {Limits::min()}); + return std::make_from_tuple( + std::ranges::fold_left(points, INITIAL, [](const auto & prev, const auto & point) { + auto & [min, max] = prev; + return std::make_pair(glm::min(min, point), glm::max(max, point)); + })); + } GlobalPosition3D min, max; }; -- cgit v1.2.3