template class mrpt::poses::CPose3DQuat::iterator_impl

Overview

Unified iterator implementation using template parameterization for const-correctness.

This eliminates code duplication between iterator and const_iterator.

#include <mrpt/poses/CPose3DQuat.h>

template <bool IsConst>
class iterator_impl
{
public:
    // typedefs

    typedef std::ptrdiff_t difference_type;
    typedef double value_type;
    typedef std::conditional_t<IsConst, const double*, double*> pointer;
    typedef std::conditional_t<IsConst, const double&, double&> reference;
    typedef std::random_access_iterator_tag iterator_category;

    // construction

    iterator_impl();

    iterator_impl(
        PoseType& obj,
        difference_type start_idx
        );

    template <bool WasConst, typename = std::enable_if_t<IsConst&& !WasConst>>
    iterator_impl(const iterator_impl<WasConst>& other);

    // methods

    reference operator * () const;
    reference operator [] (difference_type off) const;
    iterator_impl& operator ++ ();
    iterator_impl operator ++ (int);
    iterator_impl& operator -- ();
    iterator_impl operator -- (int);
    iterator_impl& operator += (difference_type off);
    iterator_impl operator + (difference_type off) const;
    iterator_impl& operator -= (difference_type off);
    iterator_impl operator - (difference_type off) const;
    difference_type operator - (const iterator_impl& it) const;
    bool operator == (const iterator_impl& it) const;
    bool operator != (const iterator_impl& it) const;
    bool operator < (const iterator_impl& it) const;
    bool operator > (const iterator_impl& it) const;
    bool operator <= (const iterator_impl& it) const;
    bool operator >= (const iterator_impl& it) const;
};