-
Notifications
You must be signed in to change notification settings - Fork 1
/
Stazione.h
78 lines (64 loc) · 2.5 KB
/
Stazione.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//Roznowicz Simone matricola 1216375
#ifndef Stazione_h
#define Stazione_h
#include "Binario.h"
#include "Train.h"
#include<iostream>
#include<string>
#include<vector>
class Stazione {
public:
static const int T_VELOCITY = 80; //massima velocità di transito in una stazione.
virtual int handle_new_train(bool reverseDirection, Train* treno, int time) = 0;
virtual void freePlace(Train* treno) = 0;
virtual bool can_leave(bool reverseDirection, int time) const = 0;
virtual void new_departure(bool reverseDirection, int time) = 0;
virtual bool can_arrive_from_box(bool reverse, Train* treno) = 0;
virtual bool can_restart(Train* treno, int time) = 0;
virtual void new_stopped_train(Train*, int time) = 0;
virtual void update_transit() = 0;
std::string get_name();
Stazione(const Stazione&) = delete;
Stazione& operator = (const Stazione&) = delete;
virtual ~Stazione() {}; //verra' sovrascritto dai distruttori di default delle classi derivate
protected:
Stazione() {};
std::string nomeStaz = "";
int distanzaOrig = 0;
int timeLastDepartureReverse = -1;
int timeLastDepartureAhead = -1;
};
class Stazione_principale : public Stazione {
public:
Stazione_principale(std::string nomeStazione, int distanzaOrigine);
int handle_new_train(bool reverseDirection, Train* treno, int time);
void freePlace(Train* treno);
bool can_leave(bool reverseDirection, int time) const;
void new_departure(bool reverseDirection, int time);
bool can_arrive_from_box(bool reverse, Train* treno);
bool can_restart(Train* treno, int time);
void new_stopped_train(Train*, int time);
void update_transit();
private:
Binario_standard* from_int_to_rail(Train* treno);
Binario_standard* get_other_rail(int rail);
std::vector<Binario_standard> vbs = {};
};
class Stazione_locale : public Stazione {
public:
Stazione_locale(std::string nomeStazione, int distanzaOrigine);
int handle_new_train(bool reverseDirection, Train* treno, int time);
void freePlace(Train* treno);
bool can_leave(bool reverseDirection, int time) const;
void new_departure(bool reverseDirection, int time);
bool can_arrive_from_box(bool reverse, Train* treno);
bool can_restart(Train* treno, int time);
void new_stopped_train(Train*, int time);
void update_transit();
private:
Binario_standard* from_int_to_rail(Train* treno);
Binario_standard* get_other_rail(int rail);
std::vector<Binario_standard> vbs = {};
std::vector<Train*> vtt = {};
};
#endif //endif of: Train_h