1
0
mirror of https://gitlab.com/klmp200/LO41.git synced 2024-11-22 16:53:21 +00:00
LO41/Building/Building.h

53 lines
1.5 KiB
C
Raw Normal View History

//
// 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"
2018-06-10 02:00:01 +00:00
#include "../Resident/Resident.h"
#include "../Visitor/Visitor.h"
2018-06-11 00:01:56 +00:00
typedef enum {RESIDENT, VISITOR} PASSENGER_TYPE;
2018-06-10 02:00:01 +00:00
typedef union u_Passenger {
Resident * resident;
Visitor * visitor;
} Passenger;
typedef struct o_Building {
2018-06-10 02:00:01 +00:00
PRIVATE int floors;
PRIVATE List * residents;
PRIVATE List * visitors;
PRIVATE Elevator ** elevators;
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-10 02:00:01 +00:00
PRIVATE pthread_cond_t ** condition_floors;
2018-06-06 01:00:35 +00:00
PRIVATE void (*parse_residents)(_THIS(Building), char * file);
PRIVATE void (*parse_visitors)(_THIS(Building), char * file);
2018-06-10 02:00:01 +00:00
PRIVATE int (*get_inside_elevator)(_THIS(Building), int current_floor, Passenger passenger, PASSENGER_TYPE type);
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-11 08:52:58 +00:00
2018-06-10 02:00:01 +00:00
SYNCHRONIZE PUBLIC void (*go_to_floor)(_THIS(Building), int origin, int destination, Passenger passenger, PASSENGER_TYPE type);
2018-06-06 01:00:35 +00:00
DESTRUCTOR(Building);
} Building;
2018-06-10 23:58:52 +00:00
FRIENDLY(residents, SharedData)
FRIENDLY(visitors, SharedData)
FRIENDLY(elevators, SharedData)
Building *_init_Building(char * residents_file, char * visitors_file);
#endif //LO41_BUILDING_H