// // Created by Antoine Bartuccio on 05/06/2018. // #ifndef LO41_BUILDING_H #define LO41_BUILDING_H #define ELEVATOR_NB 3 #define FLOORS 25 #include "../Objects.h" #include "../List/List.h" #include "../Elevator/Elevator.h" #include "../CommunicationBox/CommunicationBox.h" #include "../Resident/Resident.h" #include "../Visitor/Visitor.h" typedef enum {resident, visitor} PASSENGER_TYPE; typedef union u_Passenger { Resident * resident; Visitor * visitor; } Passenger; typedef struct o_Building { PRIVATE int floors; PRIVATE List * residents; PRIVATE List * visitors; PRIVATE CommunicationBox * box; PRIVATE Elevator ** elevators; PRIVATE pthread_mutex_t * mutex_get_inside_elevator; PRIVATE pthread_mutex_t * mutex_get_outside_elevator; PRIVATE pthread_cond_t ** condition_floors; PRIVATE void (*parse_residents)(_THIS(Building), char * file); PRIVATE void (*parse_visitors)(_THIS(Building), char * file); PRIVATE int (*get_inside_elevator)(_THIS(Building), int current_floor, Passenger passenger, PASSENGER_TYPE type); SYNCHRONIZE PUBLIC void (*go_to_floor)(_THIS(Building), int origin, int destination, Passenger passenger, PASSENGER_TYPE type); DESTRUCTOR(Building); } Building; Building *_init_Building(char * residents_file, char * visitors_file); #endif //LO41_BUILDING_H