refinable_partition_fwd.h

Back to Refinable partition

pastel/sys/refinable_partition/

#ifndef PASTELSYS_REFINABLE_PARTITION_FWD_H
#define PASTELSYS_REFINABLE_PARTITION_FWD_H

#include "pastel/sys/generic/class.h"

#include <list>

namespace Pastel
{

    template <typename ElementData, typename SetData>
    class RefinablePartition_Fwd
    {
    public:
        class Element;
        using ElementSet = std::list<Element>;

        typedef typename ElementSet::iterator
            Element_Iterator;
    #ifdef __GNUC__
        typedef typename ElementSet::iterator
            Element_ConstIterator;
    #else
        typedef typename ElementSet::const_iterator
            Element_ConstIterator;
    #endif

        struct Element_Tag;
        using ElementData_Class = Class<ElementData, Element_Tag>;

        class Set;
        using SetSet = std::list<Set>;

        typedef typename SetSet::iterator
            Set_Iterator;
    #ifdef __GNUC__
        typedef typename SetSet::iterator
            Set_ConstIterator;
    #else
        typedef typename SetSet::const_iterator
            Set_ConstIterator;
    #endif

        struct Set_Tag;
        using SetData_Class = Class<SetData, Set_Tag>;

        using MemberSet = std::list<Element_Iterator>;

        typedef typename MemberSet::iterator
            Member_Iterator;
    #ifdef __GNUC__
        typedef typename MemberSet::iterator
            Member_ConstIterator;
    #else
        typedef typename MemberSet::const_iterator
            Member_ConstIterator;
    #endif

        using SplitSet = std::list<Set_Iterator>;

        typedef typename SplitSet::iterator
            Split_Iterator;
    #ifdef __GNUC__
        typedef typename SplitSet::iterator
            Split_ConstIterator;
    #else
        typedef typename SplitSet::const_iterator
            Split_ConstIterator;
    #endif
    };

}

#endif