elevator  0.7
Симулятор пассажирского лифта
Control.h
См. документацию.
1 // Проект elevator
2 // (c) И.К. Марчевский, 2021-2022
3 
12 #pragma once
13 
14 #include <memory>
15 
16 #include "Elevator.h"
17 #include "FloorButtons.h"
18 
19 
20 class Queue;
21 
25 class Control
26 {
27 private:
29  std::vector<std::unique_ptr<Elevator>> elevators;
30 
32  std::unique_ptr<FloorButtons> floorButtons;
33 
35  size_t time;
36 
38  void TimeIncrement();
39 
41  std::unique_ptr<Queue> queue;
42 
44  void FindAppearingPassengers();
45 
47  void PressingFloorButtons();
48 
50  void LeavingFloors();
51 
57  bool isElevatorOnFloor(size_t stage) const;
58 
60  mutable std::vector<std::string> passStatBuffer;
61 
62 public:
63 
65  const size_t waitingTime = 5;
66 
68  const size_t timeEntering = 2;
69 
71  const size_t timeLeaving = 2;
72 
74  const size_t timeOpening = 4;
75 
77  const size_t timeClosing = 4;
78 
80  const size_t timeAccelerating = 4;
81 
83  const size_t timeBreaking = 3;
84 
86  const double veloUniform = 0.25;
87 
93  Control(
94  size_t numberOfFloors,
95  size_t numberOfElevators,
96  size_t capacityOfElevator);
97 
98 
100  ~Control();
101 
102 
104  void MakeStep();
105 
106 
110  size_t getCurrentTime() const
111  {
112  return time;
113  }
114 
115 
120  void SetElevatorDestination(size_t elevatorNumber, size_t destination)
121  {
122  elevators[elevatorNumber]->setDestination(destination);
123  }
124 
125 
130  void SetElevatorIndicator(size_t elevatorNumber, ElevatorIndicator indicator)
131  {
132  elevators[elevatorNumber]->setIndicator(indicator);
133  }
134 
135 
140  size_t getElevatorDestination(size_t elevatorNumber) const
141  {
142  return elevators[elevatorNumber]->getDestination();
143  }
144 
145 
150  ElevatorIndicator getElevatorIndicator(size_t elevatorNumber) const
151  {
152  return elevators[elevatorNumber]->getIndicator();
153  }
154 
155 
167  bool isElevatorAchievedDestination(size_t elevatorNumber) const
168  {
169  return elevators[elevatorNumber]->isDestinationAchieved(floorButtons->getUpButtons(), floorButtons->getDnButtons());
170  }
171 
172 
188  bool isElevatorEmptyAfterUnloading(size_t elevatorNumber) const
189  {
190  return elevators[elevatorNumber]->isEmptyAfterUnloading();
191  }
192 
193 
200  bool isElevatorEmpty(size_t elevatorNumber) const
201  {
202  return elevators[elevatorNumber]->isEmpty();
203  }
204 
205 
212  bool isElevatorGoingUp(size_t elevatorNumber) const
213  {
214  return elevators[elevatorNumber]->isGoingUp();
215  }
216 
217 
224  bool isElevatorGoingDn(size_t elevatorNumber) const
225  {
226  return elevators[elevatorNumber]->isGoingDn();
227  }
228 
229 
238  bool isElevatorStaying(size_t elevatorNumber) const
239  {
240  return elevators[elevatorNumber]->isStaying();
241  }
242 
243 
250  bool isElevatorGoingUniformly(size_t elevatorNumber) const
251  {
252  return elevators[elevatorNumber]->isGoingUniformly();
253  }
254 
255 
262  bool isElevatorAccelerating(size_t elevatorNumber) const
263  {
264  return elevators[elevatorNumber]->isAccelerating();
265  }
266 
267 
274  bool isElevatorBreaking(size_t elevatorNumber) const
275  {
276  return elevators[elevatorNumber]->isBreaking();
277  }
278 
279 
286  bool isElevatorDoorsOpening(size_t elevatorNumber) const
287  {
288  return elevators[elevatorNumber]->isDoorsOpening();
289  }
290 
291 
298  bool isElevatorDoorsClosing(size_t elevatorNumber) const
299  {
300  return elevators[elevatorNumber]->isDoorsClosing();
301  }
302 
303 
310  bool isElevatorDoorsOpened(size_t elevatorNumber) const
311  {
312  return elevators[elevatorNumber]->isDoorsOpened();
313  }
314 
315 
322  bool isElevatorStayingDoorsClosed(size_t elevatorNumber) const
323  {
324  return elevators[elevatorNumber]->isStayingDoorsClosed();
325  }
326 
327 
332  double getElevatorPosition(size_t elevatorNumber) const
333  {
334  return elevators[elevatorNumber]->getPosition();
335  }
336 
337 
341  const std::vector<bool>& getFloorUpButtons() const
342  {
343  return floorButtons->getUpButtons();
344  }
345 
346 
350  const std::vector<bool>& getFloorDnButtons() const
351  {
352  return floorButtons->getDnButtons();
353  }
354 
355 
360  bool getFloorUpButton(size_t floor) const
361  {
362  return floorButtons->getUpButton(floor);
363  }
364 
365 
370  bool getFloorDnButton(size_t floor) const
371  {
372  return floorButtons->getDnButton(floor);
373  }
374 
375 
380  void unsetUpButton(size_t floor)
381  {
382  floorButtons->unsetUpButton(floor);
383  }
384 
385 
390  void unsetDnButton(size_t floor)
391  {
392  floorButtons->unsetDnButton(floor);
393  }
394 
395 
400  const std::vector<bool>& getElevatorButtons(size_t elevatorNumber) const
401  {
402  return elevators[elevatorNumber]->getButtons();
403  }
404 
405 
411  bool getElevatorButton(size_t elevatorNumber, size_t floor) const
412  {
413  return elevators[elevatorNumber]->getButton(floor);
414  }
415 
416 
420  void AddPassengerToQueue(const PassengerProperties& passProp_);
421 
425  void ReadTimeTable(const std::string& fileName_);
426 
427 
436  void PrintElevatorState(size_t elevatorNumber, const std::string& fname = "") const;
437 
438 
446  void PrintButtonsState(const std::string& fname = "") const;
447 
448 
462  void PrintPassengerState(const std::string& fname = "") const;
463 
464 
469  void PrintStatistics(bool passengersDetails, const std::string& fname = "") const;
470 
471 };
472 
bool isElevatorDoorsOpening(size_t elevatorNumber) const
Проверка того, что у кабины лифта в данный момент открываются двери
Definition: Control.h:286
bool getElevatorButton(size_t elevatorNumber, size_t floor) const
Функция запроса состояния конкретной кнопки в кабине лифта
Definition: Control.h:411
const double veloUniform
Скорость равномерно движения лифта (в долях этажа)
Definition: Control.h:86
const size_t timeLeaving
Время между выходами двух пассажиров в лифт
Definition: Control.h:71
bool isElevatorBreaking(size_t elevatorNumber) const
Проверка того, что кабина лифта замедляется (тормозит)
Definition: Control.h:274
const size_t numberOfFloors
Общее число этажей
Definition: main.cpp:67
void PrintPassengerState(const std::string &fname="") const
Функция печати в файл или на экран событий, произошедших с пассажирами за последний шаг (последнюю се...
Definition: Control.cpp:789
bool isElevatorAchievedDestination(size_t elevatorNumber) const
Проверка того, что лифт завершил выполнение текущего назначения
Definition: Control.h:167
ElevatorIndicator
Состояния лампочки (индикатора направления движения) кабины лифта
Definition: Elevator.h:36
bool isElevatorGoingUp(size_t elevatorNumber) const
Проверка того, что кабина лифта движется вверх
Definition: Control.h:212
void SetElevatorDestination(size_t elevatorNumber, size_t destination)
Функция задания назначения лифту
Definition: Control.h:120
const std::vector< bool > & getFloorDnButtons() const
Функция запроса состояний кнопок "вниз" на этажах
Definition: Control.h:350
bool isElevatorStaying(size_t elevatorNumber) const
Проверка того, что кабина лифта стоит (не движется)
Definition: Control.h:238
void unsetUpButton(size_t floor)
Функция сброса (выключения) кнопки "вверх" на конкретном этаже
Definition: Control.h:380
const size_t waitingTime
Время ожидания до закрытия дверей (если только кто-то не нажмет кнопку "ход" раньше) ...
Definition: Control.h:65
double getElevatorPosition(size_t elevatorNumber) const
Функция запроса текущего положения лифта
Definition: Control.h:332
bool isElevatorStayingDoorsClosed(size_t elevatorNumber) const
Проверка того, что у кабина лифта в данный момент стоит на этаже с закрытыми дверьми ...
Definition: Control.h:322
void AddPassengerToQueue(const PassengerProperties &passProp_)
Функция добавления пассажира в очередь
Definition: Control.cpp:554
const size_t timeOpening
Время открывания дверей
Definition: Control.h:74
const size_t timeBreaking
Время торможения лифта
Definition: Control.h:83
size_t getCurrentTime() const
Функция запроса текущего времени
Definition: Control.h:110
bool isElevatorEmpty(size_t elevatorNumber) const
Проверка того, что кабина лифта пуста
Definition: Control.h:200
const size_t numberOfElevators
Число лифтов
Definition: main.cpp:56
ElevatorIndicator getElevatorIndicator(size_t elevatorNumber) const
Функция запроса текущего состояния индикатора
Definition: Control.h:150
bool isElevatorAccelerating(size_t elevatorNumber) const
Проверка того, что кабина лифта ускоряется (разгоняется)
Definition: Control.h:262
const size_t timeAccelerating
Время разгона лифта
Definition: Control.h:80
Заголовочный файл с описанием класса Elevator и сопутствующих структур
~Control()
Деструктор
Definition: Control.cpp:30
bool isElevatorEmptyAfterUnloading(size_t elevatorNumber) const
Проверка того, что лифт пустой после выхода очередного пассажира
Definition: Control.h:188
bool isElevatorDoorsOpened(size_t elevatorNumber) const
Проверка того, что у кабины лифта в данный момент открыты двери
Definition: Control.h:310
bool getFloorDnButton(size_t floor) const
Функция запроса состояния кнопки "вниз" на конкретном этаже
Definition: Control.h:370
Параметры пассажиров
Definition: Passenger.h:27
void unsetDnButton(size_t floor)
Функция сброса (выключения) кнопки "вниз" на конкретном этаже
Definition: Control.h:390
bool isElevatorGoingDn(size_t elevatorNumber) const
Проверка того, что кабина лифта движется вниз
Definition: Control.h:224
const std::vector< bool > & getFloorUpButtons() const
Функция запроса состояний кнопок "вверх" на этажах
Definition: Control.h:341
const size_t timeClosing
Время закрывания дверей
Definition: Control.h:77
void SetElevatorIndicator(size_t elevatorNumber, ElevatorIndicator indicator)
Функция задания состояния индикатора лифта (лампочка со стрелочкой, которую видят пассажиры) ...
Definition: Control.h:130
const std::vector< bool > & getElevatorButtons(size_t elevatorNumber) const
Функция запроса состояний кнопок в кабине лифта
Definition: Control.h:400
size_t getElevatorDestination(size_t elevatorNumber) const
Функция запроса текущего назначения
Definition: Control.h:140
Основной класс — симулятор пассажирского лифта
Definition: Control.h:25
void PrintElevatorState(size_t elevatorNumber, const std::string &fname="") const
Функция печати в файл или на экран состояния лифта в текущий момент времени
Definition: Control.cpp:595
const size_t timeEntering
Время между входами двух пассажиров в лифт
Definition: Control.h:68
Control(size_t numberOfFloors, size_t numberOfElevators, size_t capacityOfElevator)
Инициализирующий конструктор
Definition: Control.cpp:22
Класс — очередь пассажиров
Definition: Queue.h:21
Заголовочный файл с описанием класса FloorButtons.
bool isElevatorDoorsClosing(size_t elevatorNumber) const
Проверка того, что у кабины лифта в данный момент закрываются двери
Definition: Control.h:298
bool getFloorUpButton(size_t floor) const
Функция запроса состояния кнопки "вверх" на конкретном этаже
Definition: Control.h:360
void PrintButtonsState(const std::string &fname="") const
Функция печати в файл или на экран состояния кнопок в кабинах и на этажах в текущий момент времени ...
Definition: Control.cpp:742
bool isElevatorGoingUniformly(size_t elevatorNumber) const
Проверка того, что кабина лифта движется равномерно
Definition: Control.h:250
void MakeStep()
Функция выполнения шага моделирования по времени
Definition: Control.cpp:102
void PrintStatistics(bool passengersDetails, const std::string &fname="") const
Функция печати в файл или на экран итоговой статистики, включая итоговый "рейтинг" (чем меньше - тем ...
Definition: Control.cpp:821
void ReadTimeTable(const std::string &fileName_)
Функция чтения расписания появления пассажиров на этажах
Definition: Control.cpp:559