#include <vector> #include "track.h" using namespace std; // Reset het aantal vakkenPerDag en het aantal tussenuren // van de track op elke dag naar 0 void Track::resetTrack() { for(int i = 0; i < MaxNrDagen; i++) { vakkenPerDag[i] = 0; tussenuur[i] = 0; } } // Track::resetTrack // Default constructor Track::Track() { trackId = -1; resetTrack(); // reset is ook gelijk de beginsituatie } // Track::Track // Setter voor het Id van het roosterobject void Track::setId(int const id0) { trackId = id0; } // Track::setId // Voegt een vakId toe aan de vector met alle vakIds van de track void Track::addVak(int const vakId) { vakIds.push_back(vakId); } // Track::addVak // Setter voor of de track theoretisch mogelijk is void Track::setTheoretischMogelijk(bool const theoretiscMogelijk0) { theoretischMogelijk = theoretiscMogelijk0; } // Track::setTheoretischMogelijk // Verhoogt het aantal tussenuren die de track heeft op deze dag void Track::nieuwTussenuur(int const dag) { tussenuur[dag]++; } // Track::nieuwTussenuur // Verlaagt het aantal tussenuren die de track heeft op deze dag void Track::verwijderTussenuur(int const dag) { tussenuur[dag]--; } // Track::verwijderTussenuur // Verhoogt het aantal ingeroosterde vakken die de track heeft op deze dag void Track::nieuwVakOpDag(int const dag) { vakkenPerDag[dag]++; } // Track::nieuwVakOpDag // Verlaagt het aantal ingeroosterde vakken die de track heeft op deze dag void Track::verwijderVakOpDag(int const dag) { vakkenPerDag[dag]--; } // Track::verwijderVakOpDag // Getter voor de id van de track int const Track::getId() { return trackId; } // Track::getId // Retourneert hoeveel ingeroosterde vakken de track op deze dag heeft int const Track::aantalVakken(int const dag) { return vakkenPerDag[dag]; } // Track::aantalVakken // Getter voor het aantal tussenuren de track heeft op deze dag int const Track::getTussenuren(int const dag) { return tussenuur[dag]; } // Track::getTussenuren // Getter voor of de track theoretisch mogelijk is bool const Track::getTheoretischMogelijk() { return theoretischMogelijk; } // Track::getTheoretischMogelijk // Getter voor de id's van de vakken die de track heeft vector<int> Track::getVakIds() { return vakIds; } // Track::getVakIds // Geeft de slechtste 'rang' terug die weergeeft hoe goed de // beschikbaarheid is in de tracks van het vak op een tijdslot // De rangen zijn als volgt: // -2 (Het slechtst): er is al een vak van deze track op dit tijdslot // -1 (slecht): meer dan een tussenuur op een dag // 0 (goed): er zijn nog geen andere vakken van de track ingeroosterd // 1 (goed): er komt een tussenuur // 2 (het best): het vak ligt vlak na een ander vak in de track int const Track::trackBeschikbaarheid(int const tijdslot, int const nrUrenPerDag) { int const dag = tijdslot / nrUrenPerDag; if(vakkenPerDag[dag] == 0 || !theoretischMogelijk) { return 0; } // Nog geen andere vakken van de track zijn ingeroosterd of track is theoretisch onmogelijk if(!isTijdslotBeschikbaar(tijdslot)) { return -2; } // Er is al een vak van deze track op dit tijdslot if((dag == 0 && tijdslot != 0) || (dag != 0 && (tijdslot - (nrUrenPerDag * dag)) != 0)) { if(!isTijdslotBeschikbaar(tijdslot - 1)) { return 2; } // Er is een vak in het vorige tijdslot } // Het is niet het eerste tijdslot van de dag if(!tussenuur[dag]) { if((dag == 0 && tijdslot > 1) || (dag != 0 && (tijdslot - (nrUrenPerDag * dag)) > 1)) { if(!isTijdslotBeschikbaar(tijdslot - 2)) { return 1; } // Er is een vak in het tijdslot twee uren ervoor } // Het is niet het eerste of tweede tijdslot van de dag } // Nog geen tussenuur op deze dag return -1; // De track is slecht beschikbaar } // Track::trackBeschikbaarheid