// // Created by Antoine Bartuccio on 05/06/2018. // #ifndef LO41_ELEVATOR_H #define LO41_ELEVATOR_H #include #include "../Objects.h" #include "../List/List.h" //#define MAX_ELEVATOR_CAPACITY 10 #define MAX_ELEVATOR_CAPACITY 3 typedef enum {RUNNING, WAITING, SLEEPING, BROKEN} ELEVATOR_STATE; typedef struct o_Elevator { PRIVATE ELEVATOR_STATE state; PRIVATE List * passenger_ids; PRIVATE char * name; PRIVATE int floor; PRIVATE pthread_mutex_t mutex_passenger; PRIVATE pthread_mutex_t mutex_state; PRIVATE pthread_mutex_t mutex_floor; PUBLIC void * (*runnable)(void * void_this); SYNCHRONIZE PRIVATE void (*set_state)(_THIS(Elevator), ELEVATOR_STATE var); SYNCHRONIZE PRIVATE void (*set_floor)(_THIS(Elevator), int var); SYNCHRONIZE PUBLIC void (*repair)(_THIS(Elevator)); SYNCHRONIZE PUBLIC int (*get_number_of_passengers)(_THIS(Elevator)); SYNCHRONIZE PUBLIC void (*add_passenger)(_THIS(Elevator), int passenger_id); SYNCHRONIZE PUBLIC ELEVATOR_STATE (*get_state)(_THIS(Elevator)); SYNCHRONIZE PUBLIC int (*get_floor)(_THIS(Elevator)); SYNCHRONIZE PUBLIC int (*can_get_inside)(_THIS(Elevator), int floor); DESTRUCTOR(Elevator); } Elevator; FRIENDLY(state, Building) Elevator *_init_Elevator(char* name); #endif //LO41_ELEVATOR_H