2018-06-06 01:15:23 +02:00
|
|
|
//
|
|
|
|
// Created by Antoine Bartuccio on 05/06/2018.
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef LO41_ELEVATOR_H
|
|
|
|
#define LO41_ELEVATOR_H
|
|
|
|
|
2018-06-07 22:04:30 +02:00
|
|
|
#include <pthread.h>
|
2018-06-06 01:15:23 +02:00
|
|
|
#include "../Objects.h"
|
2018-06-07 22:04:30 +02:00
|
|
|
#include "../List/List.h"
|
2018-06-18 15:51:48 +02:00
|
|
|
#include "../Passenger/Passenger.h"
|
2018-06-07 22:04:30 +02:00
|
|
|
|
2018-06-15 11:50:38 +02:00
|
|
|
//#define MAX_ELEVATOR_CAPACITY 10
|
2018-06-22 01:35:46 +02:00
|
|
|
#define MAX_ELEVATOR_CAPACITY 12
|
2018-06-07 22:04:30 +02:00
|
|
|
|
2018-06-15 11:50:38 +02:00
|
|
|
typedef enum {RUNNING, WAITING, SLEEPING, BROKEN} ELEVATOR_STATE;
|
2018-06-06 01:15:23 +02:00
|
|
|
|
|
|
|
typedef struct o_Elevator {
|
2018-06-07 22:04:30 +02:00
|
|
|
PRIVATE ELEVATOR_STATE state;
|
2018-06-18 15:51:48 +02:00
|
|
|
PRIVATE List * passengers;
|
2018-06-07 22:04:30 +02:00
|
|
|
PRIVATE char * name;
|
2018-06-10 04:00:01 +02:00
|
|
|
PRIVATE int floor;
|
2018-06-21 17:39:30 +02:00
|
|
|
PRIVATE int target_floor;
|
2018-06-22 02:50:04 +02:00
|
|
|
PRIVATE int thread_number;
|
2018-06-18 19:24:35 +02:00
|
|
|
PRIVATE pthread_mutex_t mutex_passengers;
|
2018-06-08 00:08:18 +02:00
|
|
|
PRIVATE pthread_mutex_t mutex_state;
|
2018-06-10 04:00:01 +02:00
|
|
|
PRIVATE pthread_mutex_t mutex_floor;
|
2018-06-06 01:15:23 +02:00
|
|
|
|
2018-06-08 00:08:18 +02:00
|
|
|
PUBLIC void * (*runnable)(void * void_this);
|
2018-06-22 02:50:04 +02:00
|
|
|
PUBLIC void (*set_thread_number)(_THIS(Elevator), int data);
|
2018-06-08 00:08:18 +02:00
|
|
|
|
|
|
|
SYNCHRONIZE PRIVATE void (*set_state)(_THIS(Elevator), ELEVATOR_STATE var);
|
2018-06-10 12:47:07 +02:00
|
|
|
SYNCHRONIZE PRIVATE void (*set_floor)(_THIS(Elevator), int var);
|
2018-06-21 17:39:30 +02:00
|
|
|
SYNCHRONIZE PRIVATE int (*get_next_passenger_stop)(_THIS(Elevator));
|
2018-06-08 00:08:18 +02:00
|
|
|
|
|
|
|
SYNCHRONIZE PUBLIC void (*repair)(_THIS(Elevator));
|
2018-06-07 22:04:30 +02:00
|
|
|
SYNCHRONIZE PUBLIC int (*get_number_of_passengers)(_THIS(Elevator));
|
2018-06-21 20:26:35 +02:00
|
|
|
SYNCHRONIZE PUBLIC void (*remove_passenger) (_THIS(Elevator), Passenger * passenger);
|
2018-06-20 19:36:00 +02:00
|
|
|
SYNCHRONIZE PUBLIC void (*add_passenger)(_THIS(Elevator), Passenger * passenger);
|
2018-06-08 00:08:18 +02:00
|
|
|
SYNCHRONIZE PUBLIC ELEVATOR_STATE (*get_state)(_THIS(Elevator));
|
2018-06-10 04:00:01 +02:00
|
|
|
SYNCHRONIZE PUBLIC int (*get_floor)(_THIS(Elevator));
|
2018-06-15 15:38:26 +02:00
|
|
|
SYNCHRONIZE PUBLIC int (*can_get_inside)(_THIS(Elevator), int floor);
|
2018-06-06 03:00:35 +02:00
|
|
|
DESTRUCTOR(Elevator);
|
2018-06-08 00:08:18 +02:00
|
|
|
|
2018-06-06 01:15:23 +02:00
|
|
|
} Elevator;
|
|
|
|
|
2018-06-07 22:04:30 +02:00
|
|
|
FRIENDLY(state, Building)
|
|
|
|
|
|
|
|
Elevator *_init_Elevator(char* name);
|
2018-06-06 03:00:35 +02:00
|
|
|
|
2018-06-06 01:15:23 +02:00
|
|
|
#endif //LO41_ELEVATOR_H
|