Browse Source

meta: cleanup meta_range impl

Michele Caini 1 year ago
parent
commit
c3758edb83
1 changed files with 6 additions and 83 deletions
  1. 6 83
      src/entt/meta/range.hpp

+ 6 - 83
src/entt/meta/range.hpp

@@ -13,89 +13,8 @@ namespace entt {
 /*! @cond TURN_OFF_DOXYGEN */
 /*! @cond TURN_OFF_DOXYGEN */
 namespace internal {
 namespace internal {
 
 
-template<typename Type, typename It, typename = void>
-struct meta_range_iterator final {
-    using value_type = std::pair<id_type, Type>;
-    using pointer = input_iterator_pointer<value_type>;
-    using reference = value_type;
-    using difference_type = std::ptrdiff_t;
-    using iterator_category = std::input_iterator_tag;
-    using iterator_concept = std::random_access_iterator_tag;
-
-    constexpr meta_range_iterator() noexcept
-        : it{},
-          ctx{} {}
-
-    constexpr meta_range_iterator(const meta_ctx &area, const It iter) noexcept
-        : it{iter},
-          ctx{&area} {}
-
-    constexpr meta_range_iterator &operator++() noexcept {
-        return ++it, *this;
-    }
-
-    constexpr meta_range_iterator operator++(int) noexcept {
-        meta_range_iterator orig = *this;
-        return ++(*this), orig;
-    }
-
-    constexpr meta_range_iterator &operator--() noexcept {
-        return --it, *this;
-    }
-
-    constexpr meta_range_iterator operator--(int) noexcept {
-        meta_range_iterator orig = *this;
-        return operator--(), orig;
-    }
-
-    constexpr meta_range_iterator &operator+=(const difference_type value) noexcept {
-        it += value;
-        return *this;
-    }
-
-    constexpr meta_range_iterator operator+(const difference_type value) const noexcept {
-        meta_range_iterator copy = *this;
-        return (copy += value);
-    }
-
-    constexpr meta_range_iterator &operator-=(const difference_type value) noexcept {
-        return (*this += -value);
-    }
-
-    constexpr meta_range_iterator operator-(const difference_type value) const noexcept {
-        return (*this + -value);
-    }
-
-    [[nodiscard]] constexpr reference operator[](const difference_type value) const noexcept {
-        return {it[value].id, Type{*ctx, it[value]}};
-    }
-
-    [[nodiscard]] constexpr pointer operator->() const noexcept {
-        return operator*();
-    }
-
-    [[nodiscard]] constexpr reference operator*() const noexcept {
-        return operator[](0);
-    }
-
-    template<typename... Args>
-    friend constexpr std::ptrdiff_t operator-(const meta_range_iterator<Args...> &, const meta_range_iterator<Args...> &) noexcept;
-
-    template<typename... Args>
-    friend constexpr bool operator==(const meta_range_iterator<Args...> &, const meta_range_iterator<Args...> &) noexcept;
-
-    template<typename... Args>
-    friend constexpr bool operator<(const meta_range_iterator<Args...> &, const meta_range_iterator<Args...> &) noexcept;
-
-private:
-    It it;
-    const meta_ctx *ctx;
-};
-
 template<typename Type, typename It>
 template<typename Type, typename It>
-struct meta_range_iterator<Type, It, std::void_t<typename std::iterator_traits<It>::value_type::second_type>> final {
-    // deprecated work-in-progress specialization
-
+struct meta_range_iterator final {
     using value_type = std::pair<id_type, Type>;
     using value_type = std::pair<id_type, Type>;
     using pointer = input_iterator_pointer<value_type>;
     using pointer = input_iterator_pointer<value_type>;
     using reference = value_type;
     using reference = value_type;
@@ -148,7 +67,11 @@ struct meta_range_iterator<Type, It, std::void_t<typename std::iterator_traits<I
     }
     }
 
 
     [[nodiscard]] constexpr reference operator[](const difference_type value) const noexcept {
     [[nodiscard]] constexpr reference operator[](const difference_type value) const noexcept {
-        return {it[value].first, Type{*ctx, it[value].second}};
+        if constexpr(std::is_same_v<It, typename decltype(meta_context::value)::const_iterator>) {
+            return {it[value].first, Type{*ctx, it[value].second}};
+        } else {
+            return {it[value].id, Type{*ctx, it[value]}};
+        }
     }
     }
 
 
     [[nodiscard]] constexpr pointer operator->() const noexcept {
     [[nodiscard]] constexpr pointer operator->() const noexcept {