#include <fstream.h>
#include "graph.h" // ZUSAMMENHAENGEND...
#include "cpos.h"

CPosition::CPosition( void )
  : Position( 0, 0 )
{
  count = 1;
}

CPosition::CPosition( int x0, int y0 )
  : Position( x0, y0 )
{
  count = 1;
}

CPosition::CPosition( CPosition& cp )
  : Position( cp.getX(), cp.getY() )
{
  count = cp.getCount();
}

inline CPosition CPosition::operator=( int i )
{
  setCount( i );
  return *this;
}

inline CPosition CPosition::operator=( CPosition cp )
{
  set( cp.getX(), cp.getY() );
  setCount( cp.getCount() );
  return *this;
}
/*
inline int  CPosition::operator==( CPosition& cp )
{
  return (x==cp.x) && (y==cp.y);
}
*/
inline CPosition& CPosition::operator++()
{
  ++count;
  return *this;
}
inline CPosition& CPosition::operator--()
{
  --count;
  return *this;
}

inline CPosition& CPosition::operator+ ( int i )
{
  count+=i;
  return *this;
}
inline CPosition& CPosition::operator+ ( CPosition& cp )
{
  count+=cp.getCount();
  return *this;
}

inline CPosition& CPosition::operator- ( int i )
{
  count-=i;
  return *this;
}

inline CPosition& CPosition::operator- ( CPosition& cp )
{
  count-=cp.getCount();
  return *this;
}


// Class CPList

//
// falls Position schon existiert, wird nur sein Zaehler erhoeht
//
CPosition* CPList::append( CPosition* ncp)
{
  CPosition* cp;
  for( first(); !isLast(); next() )
  {
     cp = retrieve();
     //if( (*cp) == (*ncp) )
     if( ( cp->getX() == ncp->getX() ) && ( cp->getY() == ncp->getY() ) )
     { // Position existiert schon in Liste
       // count erhoehen
       ++(*cp);
       return cp;
     }
  }
  // Position existiert noch nicht in Liste
  // also anfuegen
  return ZeigerListe<CPosition>::append( ncp );
}

int CPList::istEuler()
{
  int ungeradePunkte = 0;
  for( first(); !isLast(); next() )
  {

    CPosition* cp = retrieve();
    if( ( cp->getCount() %2 ) == 1 )
      ungeradePunkte++;
  }
  if( ungeradePunkte > 2 )
    return ZUSAMMENHAENGEND;
  if( ungeradePunkte == 2 )
    return EULERWEG;
  return EULERKREIS;
}

