//---------------------------------------------------------------------------
//#include <vcl\vcl.h>
#pragma hdrstop
#include <conio.h>
#include "laerer_skema.h"

//------------------------------Sandheds operatorer---------------------------//
#pragma package(smart_init)
bool laerer_skema::operator ==(const laerer_skema& a)
{
    return ID == a.ID;
}
bool laerer_skema::operator !=(const laerer_skema& a)
{
    return ID != a.ID;
}
bool laerer_skema::operator >(const laerer_skema& a)
{
    return ID > a.ID;
}
bool laerer_skema::operator <(const laerer_skema& a)
{
    return ID < a.ID;
}
bool laerer_skema::operator <=(const laerer_skema& a)
{
    return ID <= a.ID;
}
bool laerer_skema::operator >=(const laerer_skema& a)
{
    return ID >= a.ID;
}
void laerer_skema::operator =(const laerer_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;
      }
    }
    for(int i = 0; i < max_col; i++)
      for(int j = 0; j < max_row; j++)
        PSkema[i][j] = a.PSkema[i][j];
    ID = a.ID;
}
//----------------------------Access funktioner-------------------------------//
///Funktionen vurdere om der kan placeres en lektion i det overførte koordinat.
bool laerer_skema::Vurder(int col, int row)
{
    return(PSkema[col][row] != -3 && VurderGrund(col, row));
}//
///Funktionen optæller alle de prioriterede lektioner på lærens prioritets skema
///og returnere denne.
int laerer_skema::OptaelPrioriteredeLektioner()
{
    int count(0);
    for(int i = 0; i < max_col; i++)
      for(int j = 0; j < max_row; j++)
        if(PSkema[i][j] == -3)
          count++;
    return count;
}//
///Funktionen fylder tager en kopi af hver prioritet over i en speciel PlektionsData
///klasse. Herefter fyldes disse kopier på en stack der returneres
void laerer_skema::HentPSkema(stack<PLektionsData*>& Stack)
{
    for(int i = 0; i < max_col; i++)
    {
      for(int j = 0; j < max_row; j++)
      {
        if(PSkema[i][j] != 0)
        {
          //En kopi af prioriteten tages
          PLektion = new PLektionsData(PSkema[i][j], i, j);
          //Kopien fyldes på en stack.
          Stack.push(PLektion);
        }
      }
    }
}//
//----------------------------Update funktion---------------------------------//
///Funktionen lægger en prioritets lektioner ned på lærens Prioritets skema
bool laerer_skema::LaegPLektion(int prioritet, int col, int row)
{
    if(prioritet >= -3 && prioritet <= 3)
    {
	  PSkema[col][row] = prioritet;
      return true;
    }
    return false;
}//
//--------------------------------udskrivs funktion---------------------------//
///Funktionen udskriver prioritets skemaet.
void laerer_skema::UdskrivPSkema()
{
	for(int i = 0; i < max_col; i++)
    {
      for(int j = 0; j < max_row; j++)
        cout << PSkema[i][j] << " ";
      cout << endl;
    }
}//
//----------------------------------------------------------------------------//
///Konstruktør
laerer_skema::laerer_skema(string ID_) : skema(ID_)
{
	for(int i = 0; i < max_col; i++)
      for(int j = 0; j < max_row; j++)
        PSkema[i][j] = 0;
}//
///Default konstruktør
laerer_skema::laerer_skema() : skema()
{
	for(int i = 0; i < max_col; i++)
      for(int j = 0; j < max_row; j++)
        PSkema[i][j] = 0;
}//
//----------------------------------------------------------------------------//

