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

CPoint::CPoint( void )
  : Point( 0, 0 )
{
  count = 1; 
}

CPoint::CPoint( int x0, int y0 )
  : Point( x0, y0 )
{
  count = 1;
}

CPoint::CPoint( CPoint& cp )
  : Point( cp.getX(), cp.getY() )
{
  count = cp.getCount();
}

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

inline CPoint& CPoint::operator=( CPoint& cp )
{
  set( cp.getX(), cp.getY() );
  setCount( cp.getCount() );
  return *this;
}

inline int  CPoint::operator==( CPoint& cp )
{
  return (x==cp.x) && (y==cp.y);
}

inline CPoint& CPoint::operator++()
{
  ++count;
  return *this;
}
inline CPoint& CPoint::operator--()
{
  --count;
  return *this;
}

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

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

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


// Class CPList

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

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

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

