/** @file RAllocIterator.hpp * * @author Roland Conybeare, Dec 2025 **/ #include "AAllocIterator.hpp" #include //#include namespace xo { namespace mm { /* @class RAllocIterator */ template struct RAllocIterator : public Object { private: using O = Object; public: using ObjectType = Object; using DataPtr = Object::DataPtr; RAllocIterator() {} RAllocIterator(Object::DataPtr data) : Object{std::move(data)} {} int32_t _typeseq() const noexcept { return O::iface()->_typeseq(); } AllocInfo deref() const noexcept { return O::iface()->deref(O::data()); } cmpresult compare(const obj & other) const noexcept { return O::iface()->compare(O::data(), other); } void next() noexcept { O::iface()->next(O::data()); } AllocInfo operator*() const noexcept { return deref(); } /** triggers operator++ in obj> **/ void _preincrement() noexcept { this->next(); } static bool _valid; }; template bool RAllocIterator::_valid = facet::valid_object_router(); } /*namespace mm*/ namespace facet { template struct RoutingFor { using RoutingType = xo::mm::RAllocIterator; }; /* also provide comparison */ template inline bool operator==(obj lhs, obj rhs) { return lhs.compare(rhs).is_equal(); } template inline bool operator!=(obj lhs, obj rhs) { return !lhs.compare(rhs).is_equal(); } } } /*namespace xo*/ /* end RAllocIterator.hpp */