From b0d69c50da2b683a479d7fc2247d6327c036daff Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Wed, 4 May 2022 16:06:54 +0200 Subject: [PATCH] resource_cache: constexpr all the way (see #883) --- src/entt/resource/cache.hpp | 48 ++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/entt/resource/cache.hpp b/src/entt/resource/cache.hpp index 00b3b7859..610a418c6 100644 --- a/src/entt/resource/cache.hpp +++ b/src/entt/resource/cache.hpp @@ -39,108 +39,108 @@ public: using difference_type = std::ptrdiff_t; using iterator_category = std::input_iterator_tag; - resource_cache_iterator() ENTT_NOEXCEPT = default; + constexpr resource_cache_iterator() ENTT_NOEXCEPT = default; - resource_cache_iterator(const It iter) ENTT_NOEXCEPT + constexpr resource_cache_iterator(const It iter) ENTT_NOEXCEPT : it{iter} {} template && std::is_constructible_v>> - resource_cache_iterator(const resource_cache_iterator, Other> &other) ENTT_NOEXCEPT + constexpr resource_cache_iterator(const resource_cache_iterator, Other> &other) ENTT_NOEXCEPT : it{other.it} {} - resource_cache_iterator &operator++() ENTT_NOEXCEPT { + constexpr resource_cache_iterator &operator++() ENTT_NOEXCEPT { return ++it, *this; } - resource_cache_iterator operator++(int) ENTT_NOEXCEPT { + constexpr resource_cache_iterator operator++(int) ENTT_NOEXCEPT { resource_cache_iterator orig = *this; return ++(*this), orig; } - resource_cache_iterator &operator--() ENTT_NOEXCEPT { + constexpr resource_cache_iterator &operator--() ENTT_NOEXCEPT { return --it, *this; } - resource_cache_iterator operator--(int) ENTT_NOEXCEPT { + constexpr resource_cache_iterator operator--(int) ENTT_NOEXCEPT { resource_cache_iterator orig = *this; return operator--(), orig; } - resource_cache_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { + constexpr resource_cache_iterator &operator+=(const difference_type value) ENTT_NOEXCEPT { it += value; return *this; } - resource_cache_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { + constexpr resource_cache_iterator operator+(const difference_type value) const ENTT_NOEXCEPT { resource_cache_iterator copy = *this; return (copy += value); } - resource_cache_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { + constexpr resource_cache_iterator &operator-=(const difference_type value) ENTT_NOEXCEPT { return (*this += -value); } - resource_cache_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { + constexpr resource_cache_iterator operator-(const difference_type value) const ENTT_NOEXCEPT { return (*this + -value); } - [[nodiscard]] reference operator[](const difference_type value) const ENTT_NOEXCEPT { + [[nodiscard]] constexpr reference operator[](const difference_type value) const ENTT_NOEXCEPT { return {it[value].first, resource{it[value].second}}; } - [[nodiscard]] reference operator*() const ENTT_NOEXCEPT { + [[nodiscard]] constexpr reference operator*() const ENTT_NOEXCEPT { return (*this)[0]; } - [[nodiscard]] pointer operator->() const ENTT_NOEXCEPT { + [[nodiscard]] constexpr pointer operator->() const ENTT_NOEXCEPT { return operator*(); } template - friend std::ptrdiff_t operator-(const resource_cache_iterator &, const resource_cache_iterator &) ENTT_NOEXCEPT; + friend constexpr std::ptrdiff_t operator-(const resource_cache_iterator &, const resource_cache_iterator &) ENTT_NOEXCEPT; template - friend bool operator==(const resource_cache_iterator &, const resource_cache_iterator &) ENTT_NOEXCEPT; + friend constexpr bool operator==(const resource_cache_iterator &, const resource_cache_iterator &) ENTT_NOEXCEPT; template - friend bool operator<(const resource_cache_iterator &, const resource_cache_iterator &) ENTT_NOEXCEPT; + friend constexpr bool operator<(const resource_cache_iterator &, const resource_cache_iterator &) ENTT_NOEXCEPT; private: It it; }; template -[[nodiscard]] std::ptrdiff_t operator-(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { +[[nodiscard]] constexpr std::ptrdiff_t operator-(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { return lhs.it - rhs.it; } template -[[nodiscard]] bool operator==(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { +[[nodiscard]] constexpr bool operator==(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { return lhs.it == rhs.it; } template -[[nodiscard]] bool operator!=(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { +[[nodiscard]] constexpr bool operator!=(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { return !(lhs == rhs); } template -[[nodiscard]] bool operator<(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { +[[nodiscard]] constexpr bool operator<(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { return lhs.it < rhs.it; } template -[[nodiscard]] bool operator>(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { +[[nodiscard]] constexpr bool operator>(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { return rhs < lhs; } template -[[nodiscard]] bool operator<=(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { +[[nodiscard]] constexpr bool operator<=(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { return !(lhs > rhs); } template -[[nodiscard]] bool operator>=(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { +[[nodiscard]] constexpr bool operator>=(const resource_cache_iterator &lhs, const resource_cache_iterator &rhs) ENTT_NOEXCEPT { return !(lhs < rhs); }