-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTaxiCenter.cpp
More file actions
148 lines (135 loc) · 4.08 KB
/
TaxiCenter.cpp
File metadata and controls
148 lines (135 loc) · 4.08 KB
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include "TaxiCenter.h"
#include "Point.h"
//Get taxis.
const vector<Taxi *> &TaxiCenter::getTaxis() const {
return taxis;
}
//Get drivers.
const vector<Driver *> &TaxiCenter::getDrivers() const {
return drivers;
}
//Get passengers.
const vector<Passenger *> &TaxiCenter::getPassengers() const {
return passengers;
}
//Set taxis.
void TaxiCenter::setTaxis(const vector<Taxi *> &taxis) {
TaxiCenter::taxis = taxis;
}
//Set drivers.
void TaxiCenter::setDrivers(const vector<Driver *> &drivers) {
TaxiCenter::drivers = drivers;
}
//Set passngers.
void TaxiCenter::setPassengers(const vector<Passenger *> &passengers) {
TaxiCenter::passengers = passengers;
}
//Getting the trips.
const vector<Trip *> &TaxiCenter::getTrips() const {
return trips;
}
//Setting the trips.
void TaxiCenter::setTrips(const vector<Trip *> &trips) {
TaxiCenter::trips = trips;
}
//Adding taxi.
void TaxiCenter::addTaxi(Taxi *taxi) {
TaxiCenter::taxis.push_back(taxi);
}
//Adding driver.
void TaxiCenter::addDriver(Driver *driver) {
TaxiCenter::drivers.push_back(driver);
TaxiCenter::availableDrivers.push_back(driver);
}
//Adding driver.
void TaxiCenter::addAvailableDriver(Driver *driver) {
TaxiCenter::availableDrivers.push_back(driver);
}
//Adding passenger.
void TaxiCenter::addPassenger(Passenger *passenger) {
TaxiCenter::passengers.push_back(passenger);
}
//Adding trip.
void TaxiCenter::addTrip(Trip *trip) {
TaxiCenter::trips.push_back(trip);
}
//Print the location of the driver.
void TaxiCenter::printDriverLocation(int id) {
for (int i = 0; i < drivers.size(); i++) {
if (drivers.at(i)->getId() == id) {
drivers.at(i)->printLocation();
}
}
}
//Getting the driver by id.
Driver *TaxiCenter::getDriverById(int id) {
for (int i = 0; i < drivers.size(); i++) {
if (drivers.at(i)->getId() == id) {
return drivers.at(i);
}
}
return NULL;
}
//Setting taxis and trips to the drivers.
void TaxiCenter::setAll() {
//Assigning taxis to drivers.
for (int i = 0, j = 0; i < taxis.size() && j < drivers.size(); i++, j++) {
for (int k = 0; k < drivers.size(); k++) {
if (drivers.at(k)->getTaxi() == NULL) {
drivers.at(k)->setTaxi(taxis.at(i));
taxis.erase(taxis.begin() + i);/////////check if really deleat.
i--;
break;//////////check if exit the for and not only the if.
}
}
}
//Assigning trips to drivers
for (int i = 0, j = 0; i < trips.size() && j < availableDrivers.size(); ++i, j++) {
for (int k = 0; k < availableDrivers.size(); k++) {
if (trips.at(i)->getStart() == availableDrivers.at(k)->getLocation()) {
availableDrivers.at(k)->setTrip(trips.at(i));
trips.erase(trips.begin() + i);/////////check if really deleat.
availableDrivers.erase(availableDrivers.begin() + k);
i--;
j--;
break;//////////check if exit the for and not only the if.
}
}
}
}
//Doing the trip of every driver.
void TaxiCenter::doTrip() {
for (int i = 0; i < drivers.size(); i++) {
if (drivers.at(i)->getTrip() != NULL) {
//Set the location of driver to end of trip.
drivers.at(i)->setLocation(drivers.at(i)->getTrip()->getEnd());
//Clear trip from driver.
drivers.at(i)->clearTrip();
//Put the driver in the list of available driver.
availableDrivers.push_back(drivers.at(i));
}
}
}
//Distructor to taxi center.
TaxiCenter::~TaxiCenter() {
for (int j = 0; j < taxis.size(); ++j) {
if (taxis[j] != NULL) {
delete taxis[j];
}
}
taxis.clear();
for (int j = 0; j < trips.size(); ++j) {
if (trips[j] != NULL) {
delete trips[j];
}
}
trips.clear();
for (int i = 0; i < drivers.size() ; ++i) {
if (drivers[i] != NULL) {
delete drivers[i];
}
}
drivers.clear();
availableDrivers.clear();
passengers.clear();
}