1
0
mirror of https://gitlab.com/klmp200/LO41.git synced 2025-07-11 12:19:25 +00:00

ElevatorPassenger c'est plus propre, c'est ça le vrai polymorphisme du C++ en C

This commit is contained in:
2018-06-18 15:51:48 +02:00
parent 575defc5fc
commit b001cb1a91
7 changed files with 54 additions and 33 deletions

View File

@ -12,7 +12,7 @@ SYNCHRONIZED_GETTER(Elevator, int, floor)
SYNCHRONIZED_SETTER(Elevator, int, floor)
void _free__Elevator(THIS(Elevator)){
DELETE(this->passenger_ids);
DELETE(this->passengers);
if (this->name != NULL)
free(this->name);
@ -30,10 +30,10 @@ void _free__Elevator(THIS(Elevator)){
void add_passenger_Elevator(THIS(Elevator), int passenger_id){
pthread_mutex_lock(&this->mutex_passenger);
this->passenger_ids->insert_tail(this->passenger_ids, ((void *)&passenger_id), sizeof(int));
this->passengers->insert_tail(this->passengers, ((void *)&passenger_id), sizeof(int));
printf("Le passager avec l'id %d est entre dans l'ascenseur %s\nIl y a maintenant %d passagers dans l'ascenseur %s\n",
passenger_id, this->name, this->passenger_ids->get_size(this->passenger_ids), this->name);
if (this->passenger_ids->get_size(this->passenger_ids) >= MAX_ELEVATOR_CAPACITY)
passenger_id, this->name, this->passengers->get_size(this->passengers), this->name);
if (this->passengers->get_size(this->passengers) >= MAX_ELEVATOR_CAPACITY)
this->set_state(this, SLEEPING);
pthread_mutex_unlock(&this->mutex_passenger);
}
@ -41,7 +41,7 @@ void add_passenger_Elevator(THIS(Elevator), int passenger_id){
int get_number_of_passengers_Elevator(THIS(Elevator)){
int num;
pthread_mutex_lock(&this->mutex_passenger);
num = this->passenger_ids->get_size(this->passenger_ids);
num = this->passengers->get_size(this->passengers);
pthread_mutex_unlock(&this->mutex_passenger);
return num;
}
@ -52,7 +52,7 @@ int can_get_inside_Elevator(THIS(Elevator), int floor){
pthread_mutex_lock(&this->mutex_state);
pthread_mutex_lock(&this->mutex_floor);
permission = (this->passenger_ids->get_size(this->passenger_ids) < MAX_ELEVATOR_CAPACITY &&
permission = (this->passengers->get_size(this->passengers) < MAX_ELEVATOR_CAPACITY &&
this->state == WAITING && this->floor == floor);
pthread_mutex_unlock(&this->mutex_floor);
@ -82,7 +82,7 @@ void *runnable_Elevator(void * void_this){
Elevator *_init_Elevator(char * name){
Elevator * new_elevator = malloc_or_die(sizeof(Elevator));
new_elevator->name = strdup(name);
new_elevator->passenger_ids = NEW(List);
new_elevator->passengers = NEW(List);
pthread_mutex_init(&new_elevator->mutex_passenger, NULL);
pthread_mutex_init(&new_elevator->mutex_state, NULL);
pthread_mutex_init(&new_elevator->mutex_floor, NULL);

View File

@ -8,6 +8,7 @@
#include <pthread.h>
#include "../Objects.h"
#include "../List/List.h"
#include "../Passenger/Passenger.h"
//#define MAX_ELEVATOR_CAPACITY 10
#define MAX_ELEVATOR_CAPACITY 3
@ -16,7 +17,7 @@ typedef enum {RUNNING, WAITING, SLEEPING, BROKEN} ELEVATOR_STATE;
typedef struct o_Elevator {
PRIVATE ELEVATOR_STATE state;
PRIVATE List * passenger_ids;
PRIVATE List * passengers;
PRIVATE char * name;
PRIVATE int floor;
PRIVATE pthread_mutex_t mutex_passenger;