//---------------------------------------------------------------------------
#ifndef hold_skemaH
#define hold_skemaH
#include <cstring.h>
#include <string.h>
#include <iostream.h>
#include "skema.h"
#include "laerer_skema.h"
#include "lokale_skema.h"
//#include "lektion.h"
//---------------------------------------------------------------------------
class hold_skema : public skema
{
public:
  //konstruktører
	hold_skema(string ID_) : skema(ID_) { }
    hold_skema() : skema() {}

  //kontrol funktioner
    bool operator ==(const hold_skema& a);
    bool operator !=(const hold_skema& a);
    bool operator <=(const hold_skema& a);
    bool operator >=(const hold_skema& a);
    bool operator >(const hold_skema& a);
    bool operator <(const hold_skema& a);
    void operator =(const hold_skema& a);

  //access funktioner
    //Funktionen sletter en lektion på hold skemaet. Som det bemærkes her
	//sletter den også lektionen på heapen.
    void SletLektion(int col, int row);

    //Funktionen tager en kopi af den overførte lektion som herefter lægges
	//på henholdsvis hold, lærer og lokale skemaet.
    void LaegLektion(const lektion& l, laerer_skema& LS,
                             lokale_skema& LOS, int col, int row);

	//Funktionen vurdere om en lektion kan lægges i et bestemt koordinat på
	//et hold skema. En sandhedsværdi returneres herfor.
    bool Vurder(const lektion& Lptr, int col, int row);

    //Funktionen optæller alle lektioner af en bestemt type fag, og returnere dette.
    int OptaelFagLektion(string FagID);

    //Funktionen vurdere om lektionen i koordinatet er indeholder det samme fagID.
    bool ErFagLektion(string FagID, int col, int row);

private:
  //Kontrol funktion
	//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 FagSammenfald(const lektion& Lptr, int col, int& row);
};

#endif

