//---------------------------------------------------------------------------
#include <conio.h>
#pragma hdrstop
#include "hold_skema.h"
//--------------------------------sandhedsoperatorer--------------------------//
bool hold_skema::operator ==(const hold_skema& a)
{
    return ID == a.ID;
}
bool hold_skema::operator !=(const hold_skema& a)
{
    return ID != a.ID;
}
bool hold_skema::operator >(const hold_skema& a)
{
    return ID > a.ID;
}
bool hold_skema::operator <(const hold_skema& a)
{
    return ID < a.ID;
}
bool hold_skema::operator <=(const hold_skema& a)
{
    return ID <= a.ID;
}
bool hold_skema::operator >=(const hold_skema& a)
{
    return ID >= a.ID;
}
void hold_skema::operator =(const hold_skema& a)  
{
    for(int col = 0; col < max_col; col++)
    {
      for(int row = 0; row < max_row; row++)
      {
        if(a.skema[col][row] != NULL)
          skema[col][row] = a.skema[col][row];
        else //Skal med ellers kommer der ekstra lektioner ind på skemaet
          skema[col][row] = NULL;
      }
    }
    ID = a.ID;
} 
//----------------------------Access funktioner-------------------------------//
///Funktionen sletter en lektion på hold skemaet. Som det bemærkes her
///sletter den også lektionen på heapen.
void hold_skema::SletLektion(int col, int row)
{
    delete skema[col][row];
    skema[col][row] = NULL;
}//
///Funktionen tager en kopi af den overførte lektion som herefter lægges
///på henholdsvis hold, lærer og lokale skemaet.
void hold_skema::LaegLektion(const lektion& l, laerer_skema& LS,
                             lokale_skema& LOS, int col, int row)
{
    skema[col][row] = new lektion(l);
    LS.skema[col][row] = skema[col][row];
    LOS.skema[col][row] = skema[col][row];
}//
///Funktionen vurdere om en lektion kan lægges i et bestemt koordinat på
///et hold skema. En sandhedsværdi returneres herfor.
bool hold_skema::Vurder(const lektion& Lptr, int col, int row)
{
    if(!FagSammenfald(Lptr, col, row))
      return VurderGrund(col, row);
    return false;
}//
///FUnktionen optæller alle lektioner af en bestemt type fag, og returnere dette.
int hold_skema::OptaelFagLektion(string FagID)
{
    int count = 0;

    for(int i = 0; i < max_col; i++)
      for(int j = 0; j < max_row; j++)
        if(skema[i][j] != NULL && skema[i][j]->FagID == FagID)
          count++;

    return count;
}//
///Funktionen vurdere om lektionen i koordinatet er indeholder det samme fagID.
bool hold_skema::ErFagLektion(string FagID, int col, int row)
{
    if(skema[col][row] != NULL)
      return skema[col][row]->FagID == FagID;
    return false;
}//
//---------------------------Kontrol funktioner-------------------------------//
///Funktionen vurdere om der er andre lektioner af samme type som den overførte
///i en bestemt kolonne. Bemærk at den række hvor funktionen stopper returneres
bool hold_skema::FagSammenfald(const lektion& Lptr, int col, int& row)
{
    for(int i = 0; i < max_row; i++)
    {
      if(skema[col][i] != NULL && skema[col][i]->FagID == Lptr.FagID)
      {
        row = i;
        return true;
      }
    }
    return false;
}//
//----------------------------------------------------------------------------//


