Program Listing for File component_array_iterator.h

Return to documentation for file (rootex/utility/component_array_iterator.h)

#pragma once

#include "common/types.h"

template <typename DataType>
class ComponentArrayIterator
{
protected:
    typename Vector<DataType>::iterator m_Itr;
    int m_Index;
    Vector<bool>* m_IsValid;

public:
    ComponentArrayIterator(Vector<bool>& isValid, typename Vector<DataType>::iterator itr)
    {
        m_IsValid = &isValid;
        m_Itr = itr;
        m_Index = 0;
    }
    ComponentArrayIterator(const ComponentArrayIterator<DataType>& rawIterator) = default; // Copy constructor
    ~ComponentArrayIterator() { }

    ComponentArrayIterator<DataType>& operator=(const ComponentArrayIterator<DataType>& rawIterator) = default;

    bool operator==(const ComponentArrayIterator<DataType>& rawIterator) const { return (m_Itr == rawIterator.m_Itr); }
    bool operator!=(const ComponentArrayIterator<DataType>& rawIterator) const { return !(m_Itr == rawIterator.m_Itr); }

    ComponentArrayIterator<DataType> operator++()
    {
        while ((*m_IsValid)[m_Index + 1] == false && m_Index + 1 < (*m_IsValid).size())
        {
            m_Index++;
            m_Itr++;
        }
        m_Index++;
        m_Itr++;
        return *this;
    }

    DataType& operator*() { return *m_Itr; }
    const DataType& operator*() const { return *m_Itr; }
};