#ifndef PASTELSYS_INCIDENCE_GRAPH_INCIDENCE_H
#define PASTELSYS_INCIDENCE_GRAPH_INCIDENCE_H
#include "pastel/sys/incidence_graph.h"
namespace Pastel
{
    template <typename Settings>
    class IncidenceGraph_Fwd<Settings>::Incidence_Link
    {
    public:
        template <typename>
        friend class IncidenceGraph_::Incidence_Iterator;
        friend class Vertex;
        Incidence_Link()
            : next_(0)
            , prev_(0)
        {
            next_ = (Incidence*)this;
            prev_ = (Incidence*)this;
        }
    protected:
        Incidence* next_;
        Incidence* prev_;
    };
    template <typename Settings>
    class IncidenceGraph_Fwd<Settings>::Incidence
        : public Incidence_Link
    {
    public:
        template <typename, template <typename> class>
        friend class IncidenceGraph;
        Incidence()
            : vertex_()
            , edge_()
        {
        }
        explicit Incidence(Vertex_Iterator vertex)
            : vertex_(vertex)
            , edge_()
        {
        }
        Vertex_Iterator vertex()
        {
            return vertex_;
        }
        Vertex_ConstIterator vertex() const
        {
            return vertex_;
        }
        Edge_Iterator edge()
        {
            return edge_;
        }
        Edge_ConstIterator edge() const
        {
            return edge_;
        }
    private:
        Vertex_Iterator vertex_;
        Edge_Iterator edge_;
    };
}
#endif