From cb9d90744f4f910520bbd2cbae77a3bd45dc421c Mon Sep 17 00:00:00 2001 From: Jonathan Date: Tue, 5 Oct 2021 23:49:15 -0400 Subject: [PATCH] More constexpr --- include/common/aabb.hh | 30 +++++++++++++++--------------- include/common/qvec.hh | 7 ++++--- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/include/common/aabb.hh b/include/common/aabb.hh index 7aef87eb..5b5c3ac3 100644 --- a/include/common/aabb.hh +++ b/include/common/aabb.hh @@ -24,7 +24,7 @@ /** * touching a side/edge/corner is considered touching */ -template +template class aabb { public: @@ -49,7 +49,7 @@ private: constexpr void fix() { - for (int i = 0; i < N; i++) { + for (size_t i = 0; i < N; i++) { if (m_maxs[i] < m_mins[i]) { m_maxs[i] = m_mins[i]; } @@ -78,7 +78,7 @@ public: constexpr bool disjoint(const aabb &other, const typename V::value_type &epsilon = 0) const { - for (int i = 0; i < N; i++) { + for (size_t i = 0; i < N; i++) { if (m_maxs[i] < (other.m_mins[i] - epsilon)) return true; if (m_mins[i] > (other.m_maxs[i] + epsilon)) @@ -89,7 +89,7 @@ public: constexpr bool contains(const aabb &other) const { - for (int i = 0; i < 3; i++) { + for (size_t i = 0; i < 3; i++) { if (other.m_mins[i] < m_mins[i]) return false; if (other.m_maxs[i] > m_maxs[i]) @@ -100,7 +100,7 @@ public: constexpr bool containsPoint(const V &p) const { - for (int i = 0; i < N; i++) { + for (size_t i = 0; i < N; i++) { if (!(p[i] >= m_mins[i] && p[i] <= m_maxs[i])) return false; } @@ -109,10 +109,10 @@ public: constexpr aabb expand(const V &pt) const { - V mins, maxs; - for (int i = 0; i < N; i++) { - mins[i] = qmin(m_mins[i], pt[i]); - maxs[i] = qmax(m_maxs[i], pt[i]); + V mins = m_mins, maxs = m_maxs; + for (size_t i = 0; i < N; i++) { + mins[i] = qmin(mins[i], pt[i]); + maxs[i] = qmax(maxs[i], pt[i]); } return aabb(mins, maxs); } @@ -129,10 +129,10 @@ public: constexpr intersection_t intersectWith(const aabb &other) const { - V mins, maxs; - for (int i = 0; i < N; i++) { - mins[i] = qmax(m_mins[i], other.m_mins[i]); - maxs[i] = qmin(m_maxs[i], other.m_maxs[i]); + V mins = m_mins, maxs = m_maxs; + for (size_t i = 0; i < N; i++) { + mins[i] = qmax(mins[i], other.m_mins[i]); + maxs[i] = qmin(maxs[i], other.m_maxs[i]); if (mins[i] > maxs[i]) { // empty intersection return intersection_t(); @@ -145,12 +145,12 @@ public: constexpr aabb grow(const V &size) const { return aabb(m_mins - size, m_maxs + size); } - constexpr V &operator[](const int32_t &index) + constexpr V &operator[](const size_t &index) { return (index == 0 ? m_mins : index == 1 ? m_maxs : throw std::exception()); } - constexpr const V &operator[](const int32_t &index) const + constexpr const V &operator[](const size_t &index) const { return (index == 0 ? m_mins : index == 1 ? m_maxs : throw std::exception()); } diff --git a/include/common/qvec.hh b/include/common/qvec.hh index fdca3ae0..1fab8043 100644 --- a/include/common/qvec.hh +++ b/include/common/qvec.hh @@ -25,6 +25,7 @@ #include #include #include +#include #define qmax std::max #define qmin std::min @@ -537,7 +538,7 @@ public: // multiplication by a vector - [[nodiscard]] qvec operator*(const qvec &vec) const + [[nodiscard]] constexpr qvec operator*(const qvec &vec) const { qvec res{}; for (size_t i = 0; i < M; i++) { // for each row @@ -551,7 +552,7 @@ public: // multiplication by a matrix template - [[nodiscard]] qmat operator*(const qmat &other) const + [[nodiscard]] constexpr qmat operator*(const qmat &other) const { qmat res; for (size_t i = 0; i < M; i++) { @@ -568,7 +569,7 @@ public: // multiplication by a scalar - [[nodiscard]] qmat operator*(const T scalar) const + [[nodiscard]] constexpr qmat operator*(const T scalar) const { qmat res(*this); for (size_t i = 0; i < M * N; i++) {