2018-06-05 23:15:23 +00:00
|
|
|
//
|
|
|
|
// Created by Antoine Bartuccio on 05/06/2018.
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef LO41_BUILDING_H
|
|
|
|
#define LO41_BUILDING_H
|
|
|
|
|
|
|
|
#define ELEVATOR_NB 3
|
2018-06-06 18:29:02 +00:00
|
|
|
#define FLOORS 25
|
2018-06-05 23:15:23 +00:00
|
|
|
|
|
|
|
#include "../Objects.h"
|
|
|
|
#include "../List/List.h"
|
|
|
|
#include "../Elevator/Elevator.h"
|
2018-06-10 02:00:01 +00:00
|
|
|
#include "../Resident/Resident.h"
|
|
|
|
#include "../Visitor/Visitor.h"
|
2018-06-18 13:51:48 +00:00
|
|
|
#include "../Passenger/Passenger.h"
|
2018-06-05 23:15:23 +00:00
|
|
|
|
|
|
|
typedef struct o_Building {
|
2018-06-10 02:00:01 +00:00
|
|
|
PRIVATE int floors;
|
2018-06-21 14:15:33 +00:00
|
|
|
PRIVATE int waiting_floors[FLOORS];
|
2018-06-10 02:00:01 +00:00
|
|
|
PRIVATE List * residents;
|
|
|
|
PRIVATE List * visitors;
|
|
|
|
PRIVATE Elevator ** elevators;
|
2018-06-21 14:15:33 +00:00
|
|
|
PRIVATE pthread_mutex_t mutex_waiting_floors;
|
2018-06-15 13:38:26 +00:00
|
|
|
PRIVATE pthread_mutex_t * mutex_cond_get_inside_elevator;
|
|
|
|
PRIVATE pthread_mutex_t * mutex_cond_get_outside_elevator;
|
|
|
|
PRIVATE pthread_mutex_t * mutex_func_get_inside_elevator;
|
2018-06-21 15:39:30 +00:00
|
|
|
PRIVATE pthread_mutex_t * mutex_func_get_next_call;
|
2018-06-10 02:00:01 +00:00
|
|
|
PRIVATE pthread_cond_t ** condition_floors;
|
2018-06-06 01:00:35 +00:00
|
|
|
|
2018-06-06 18:29:02 +00:00
|
|
|
PRIVATE void (*parse_residents)(_THIS(Building), char * file);
|
|
|
|
PRIVATE void (*parse_visitors)(_THIS(Building), char * file);
|
2018-06-20 17:36:00 +00:00
|
|
|
PRIVATE int (*get_inside_elevator)(_THIS(Building), int current_floor, Passenger * passenger);
|
2018-06-10 02:00:01 +00:00
|
|
|
|
2018-06-11 08:52:58 +00:00
|
|
|
PUBLIC int (*use_call_box)(_THIS(Building), char * resident_name);
|
2018-06-15 13:38:26 +00:00
|
|
|
PUBLIC void (*signal_elevator_at_floor)(_THIS(Building), int floor);
|
2018-06-21 15:39:30 +00:00
|
|
|
PUBLIC int (*get_next_call)(_THIS(Building), int elevator_floor);
|
2018-06-21 14:15:33 +00:00
|
|
|
PUBLIC int* (*get_waiting_floors)(_THIS(Building));
|
2018-06-11 08:52:58 +00:00
|
|
|
|
2018-06-20 17:36:00 +00:00
|
|
|
SYNCHRONIZE PUBLIC void (*go_to_floor)(_THIS(Building), int origin, int destination, Passenger * passenger);
|
2018-06-06 01:00:35 +00:00
|
|
|
|
|
|
|
DESTRUCTOR(Building);
|
2018-06-05 23:15:23 +00:00
|
|
|
} Building;
|
|
|
|
|
2018-06-10 23:58:52 +00:00
|
|
|
FRIENDLY(residents, SharedData)
|
|
|
|
FRIENDLY(visitors, SharedData)
|
|
|
|
FRIENDLY(elevators, SharedData)
|
|
|
|
|
2018-06-06 18:29:02 +00:00
|
|
|
Building *_init_Building(char * residents_file, char * visitors_file);
|
2018-06-05 23:15:23 +00:00
|
|
|
|
|
|
|
#endif //LO41_BUILDING_H
|