#ifndef __GRAPH_H
#define __GRAPH_H

#include <fstream.h>

#include "line.h"
#include "cpos.h"

enum{ NICHTZUSAMMENHAENGEND, ZUSAMMENHAENGEND, EULERWEG, EULERKREIS };
enum {READY, NOTREADY};

class Graph
{
  public:
    Graph( void );
    virtual ~Graph( void ) {};

    virtual void append( Line* nl );
    virtual void remove( Line* nl );
    int  isEuler( void );
    int  isZusammenhaengend( void ); // sind alle Linien irgendwie miteinander
                                     // verbunden


    int  sort( Position startPosition ); // sortiert die Linien so, dass sie in einem
                     // Zug gemalt werden koennen


  protected:
    int _sort( Position cp );
    LineList* _getSuccessors( Position cp ); // gibt angrenzenden Kanten zurueck
    int  _makePositionList( void );

    LineList lineList;
    LineList sortList;
    CPList   cpList;
    ofstream* out;
};

#endif // __GRAPH_H
