forked from ashishps1/awesome-low-level-design
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIntersection.cpp
More file actions
65 lines (53 loc) · 1.8 KB
/
Intersection.cpp
File metadata and controls
65 lines (53 loc) · 1.8 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
#include "Intersection.hpp"
#include <iostream>
#include <algorithm>
Intersection::Intersection(std::string intersectionId)
: intersectionId(intersectionId), isOperational(true) {}
Intersection::~Intersection() {
for (auto signal : signals) {
delete signal;
}
}
std::string Intersection::getIntersectionId() const { return intersectionId; }
bool Intersection::isWorking() const { return isOperational; }
void Intersection::addSignal(Signal* signal) {
signals.push_back(signal);
}
void Intersection::removeSignal(const std::string& signalId) {
auto it = std::find_if(signals.begin(), signals.end(),
[signalId](Signal* signal) { return signal->getSignalId() == signalId; });
if (it != signals.end()) {
delete *it;
signals.erase(it);
}
}
void Intersection::updateSignals(int timeElapsed) {
if (!isOperational) return;
for (auto signal : signals) {
signal->updateSignal(timeElapsed);
}
}
void Intersection::setOperational(bool status) {
isOperational = status;
for (auto signal : signals) {
signal->setWorking(status);
}
}
void Intersection::synchronizeSignals() {
for (auto signal : signals) {
signal->reset();
}
}
void Intersection::displayStatus() const {
std::cout << "\nIntersection " << intersectionId << " Status:" << std::endl;
std::cout << "Operational: " << (isOperational ? "Yes" : "No") << std::endl;
std::cout << "Signals:" << std::endl;
for (const auto& signal : signals) {
signal->displayStatus();
}
}
Signal* Intersection::findSignal(const std::string& signalId) const {
auto it = std::find_if(signals.begin(), signals.end(),
[signalId](Signal* signal) { return signal->getSignalId() == signalId; });
return it != signals.end() ? *it : nullptr;
}