/
liftController.h
58 lines (45 loc) · 1.62 KB
/
liftController.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
#ifndef LIFT_CONTROLLER
#define LIFT_CONTROLLER
#include "setPuertas.h"
#include "pipe.h"
#include "logger.h"
#include <vector>
enum MovingDirection { DOWN = -1, NOT_MOVING = 0, UP = 1, STOPPED };
struct liftControlledState {
unsigned int nextFloor, currentFloor;
MovingDirection movingDirection;
};
class LiftController {
public:
LiftController(SetPuertas puertas, unsigned int capacidad, Pipe* inPipe, Pipe* outPipe);
~LiftController();
int work();
static void signalHandler( int signum) {
LiftController::continuarSimulacion = 0;
}
private:
Logger log;
static volatile sig_atomic_t continuarSimulacion;
Pipe* inPipe;
Pipe* outPipe;
SetPuertas puertas;
unsigned int numberOfFloors, peopleTravelling, lugarDisponible;
unsigned int currentLift; // Should disappear
std::vector<liftControlledState> liftStates;
std::vector<unsigned int> busyFloors;
std::vector<unsigned int> requestedFloors;
bool simRunning() { return ( LiftController::continuarSimulacion == 1 ); }
void waitGenteEnElSistema();
void viajarUnPiso(liftControlledState &state);
void bajarPersonas(liftControlledState &state);
void subirPersonas(liftControlledState &state);
bool isFull();
void refreshBusyFloors();
void updateMovingDirection(liftControlledState &state);
int findNearestBelow(liftControlledState &state);
int findNearestAbove(liftControlledState &state);
void logLiftState(liftControlledState state);
unsigned int randFloor(unsigned int excludeFloor);
MovingDirection determinarDireccionDeMovimiento(liftControlledState &state);
};
#endif