meta: prepare meta_sequence_container::meta_iterator to model a bidirectional iterator
This commit is contained in:
@@ -1445,16 +1445,16 @@ class meta_sequence_container::meta_iterator final {
|
||||
deref
|
||||
};
|
||||
|
||||
using vtable_type = void(const operation, const any &, void *);
|
||||
using vtable_type = void(const operation, const any &, const void *);
|
||||
|
||||
template<typename It>
|
||||
static void basic_vtable(const operation op, const any &value, void *other) {
|
||||
static void basic_vtable(const operation op, const any &value, const void *other) {
|
||||
switch(op) {
|
||||
case operation::incr:
|
||||
++any_cast<It &>(const_cast<any &>(value));
|
||||
any_cast<It &>(const_cast<any &>(value)) += *static_cast<const std::ptrdiff_t *>(other);
|
||||
break;
|
||||
case operation::deref:
|
||||
static_cast<meta_any *>(other)->emplace<typename std::iterator_traits<It>::reference>(*any_cast<const It &>(value));
|
||||
static_cast<meta_any *>(const_cast<void *>(other))->emplace<typename std::iterator_traits<It>::reference>(*any_cast<const It &>(value));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1486,7 +1486,8 @@ public:
|
||||
|
||||
/*! @brief Pre-increment operator. @return This iterator. */
|
||||
meta_iterator &operator++() ENTT_NOEXCEPT {
|
||||
return vtable(operation::incr, handle, nullptr), *this;
|
||||
const std::ptrdiff_t diff{1};
|
||||
return vtable(operation::incr, handle, &diff), *this;
|
||||
}
|
||||
|
||||
/*! @brief Post-increment operator. @return This iterator. */
|
||||
|
||||
Reference in New Issue
Block a user