meta_[sequence|associative]_container: iterator review

This commit is contained in:
Michele Caini
2021-10-20 10:08:49 +02:00
parent 4b9331f086
commit fee80321ef

View File

@@ -1495,7 +1495,7 @@ public:
* @param iter The actual iterator with which to build the meta iterator.
*/
template<typename It>
meta_iterator(It iter)
explicit meta_iterator(It iter)
: vtable{&basic_vtable<It>},
handle{std::move(iter)} {}
@@ -1510,24 +1510,6 @@ public:
return ++(*this), orig;
}
/**
* @brief Checks if two iterators refer to the same element.
* @param other The iterator with which to compare.
* @return True if the iterators refer to the same element, false otherwise.
*/
[[nodiscard]] bool operator==(const meta_iterator &other) const ENTT_NOEXCEPT {
return handle == other.handle;
}
/**
* @brief Checks if two iterators refer to the same element.
* @param other The iterator with which to compare.
* @return False if the iterators refer to the same element, true otherwise.
*/
[[nodiscard]] bool operator!=(const meta_iterator &other) const ENTT_NOEXCEPT {
return !(*this == other);
}
/**
* @brief Indirection operator for accessing the pointed opaque object.
* @return The element to which the iterator points.
@@ -1567,6 +1549,26 @@ private:
any handle{};
};
/**
* @brief Checks if two iterators refer to the same element.
* @param lhs An iterator to compare.
* @param rhs An iterator with which to compare.
* @return True if the iterators refer to the same element, false otherwise.
*/
[[nodiscard]] inline bool operator==(const typename meta_sequence_container::iterator &lhs, const typename meta_sequence_container::iterator &rhs) ENTT_NOEXCEPT {
return lhs.base() == rhs.base();
}
/**
* @brief Checks if two iterators refer to the same element.
* @param lhs An iterator to compare.
* @param rhs An iterator with which to compare.
* @return False if the iterators refer to the same element, true otherwise.
*/
[[nodiscard]] inline bool operator!=(const typename meta_sequence_container::iterator &lhs, const typename meta_sequence_container::iterator &rhs) ENTT_NOEXCEPT {
return !(lhs == rhs);
}
/**
* @brief Returns the meta value type of a container.
* @return The meta value type of the container.
@@ -1717,24 +1719,6 @@ public:
return ++(*this), orig;
}
/**
* @brief Checks if two iterators refer to the same element.
* @param other The iterator with which to compare.
* @return True if the iterators refer to the same element, false otherwise.
*/
[[nodiscard]] bool operator==(const meta_iterator &other) const ENTT_NOEXCEPT {
return handle == other.handle;
}
/**
* @brief Checks if two iterators refer to the same element.
* @param other The iterator with which to compare.
* @return False if the iterators refer to the same element, true otherwise.
*/
[[nodiscard]] bool operator!=(const meta_iterator &other) const ENTT_NOEXCEPT {
return !(*this == other);
}
/**
* @brief Indirection operator for accessing the pointed opaque object.
* @return The element to which the iterator points.
@@ -1761,11 +1745,39 @@ public:
return static_cast<bool>(handle);
}
/**
* @brief Returns the underlying iterator.
* @return The underlying iterator.
*/
any base() const ENTT_NOEXCEPT {
return handle.as_ref();
}
private:
vtable_type *vtable{};
any handle{};
};
/**
* @brief Checks if two iterators refer to the same element.
* @param lhs An iterator to compare.
* @param rhs An iterator with which to compare.
* @return True if the iterators refer to the same element, false otherwise.
*/
[[nodiscard]] inline bool operator==(const typename meta_associative_container::iterator &lhs, const typename meta_associative_container::iterator &rhs) ENTT_NOEXCEPT {
return lhs.base() == rhs.base();
}
/**
* @brief Checks if two iterators refer to the same element.
* @param lhs An iterator to compare.
* @param rhs An iterator with which to compare.
* @return False if the iterators refer to the same element, true otherwise.
*/
[[nodiscard]] inline bool operator!=(const typename meta_associative_container::iterator &lhs, const typename meta_associative_container::iterator &rhs) ENTT_NOEXCEPT {
return !(lhs == rhs);
}
/**
* @brief Returns true if a container is also key-only, false otherwise.
* @return True if the associative container is also key-only, false otherwise.