mirror of
https://gitlab.com/klmp200/LO41.git
synced 2024-11-22 08:43:22 +00:00
To the moooo.... oh wait, not yet.
This commit is contained in:
parent
55126c9ca6
commit
653734ec1f
@ -212,12 +212,7 @@ void go_to_floor_Building(THIS(Building), int origin, int destination, Passenger
|
|||||||
this->elevators[elevator_number]->name, origin);
|
this->elevators[elevator_number]->name, origin);
|
||||||
|
|
||||||
pthread_cond_wait(this->condition_floors[destination], this->mutex_cond_get_outside_elevator);
|
pthread_cond_wait(this->condition_floors[destination], this->mutex_cond_get_outside_elevator);
|
||||||
if (passenger->type == RESIDENT)
|
this->elevators[elevator_number]->remove_passenger(this->elevators[elevator_number], passenger);
|
||||||
printf("Le résident %s sort de l'ascenseur %s à l'étage %d\n", passenger->get_name(passenger),
|
|
||||||
this->elevators[elevator_number]->name, destination);
|
|
||||||
else if (passenger->type == VISITOR)
|
|
||||||
printf("Le visiteur %s sort de l'ascenseur %s à l'étage %d\n", passenger->get_name(passenger),
|
|
||||||
this->elevators[elevator_number]->name, destination);
|
|
||||||
}else{
|
}else{
|
||||||
if (passenger->type == RESIDENT)
|
if (passenger->type == RESIDENT)
|
||||||
printf("Le résident %s à l'étage %d n'a pas pu rentrer dans un ascenseur. Préempté !\n", passenger->get_name(passenger), origin);
|
printf("Le résident %s à l'étage %d n'a pas pu rentrer dans un ascenseur. Préempté !\n", passenger->get_name(passenger), origin);
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include "Elevator.h"
|
#include "Elevator.h"
|
||||||
#include "../SharedData/SharedData.h"
|
#include "../SharedData/SharedData.h"
|
||||||
|
|
||||||
@ -40,9 +41,20 @@ void add_passenger_Elevator(THIS(Elevator), Passenger * passenger){
|
|||||||
pthread_mutex_unlock(&this->mutex_passengers);
|
pthread_mutex_unlock(&this->mutex_passengers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a passenger from an elevator. Efectively remove him from the elevator's passenger list.
|
||||||
|
* @SYNCHRONIZED passengers : this elevator's list of passenger is accessed via mutex
|
||||||
|
* @param THIS(Elevator) : this
|
||||||
|
* @param passenger : the passenger to remove
|
||||||
|
*/
|
||||||
void remove_passenger_Elevator(THIS(Elevator), Passenger * passenger){
|
void remove_passenger_Elevator(THIS(Elevator), Passenger * passenger){
|
||||||
pthread_mutex_lock(&this->mutex_passengers);
|
pthread_mutex_lock(&this->mutex_passengers);
|
||||||
|
if (passenger->type == RESIDENT)
|
||||||
|
printf("Le résident %s sort de l'ascenseur %s à l'étage %d\n", passenger->get_name(passenger), this->name, this->get_floor(this));
|
||||||
|
else if (passenger->type == VISITOR)
|
||||||
|
printf("Le visiteur %s sort de l'ascenseur %s à l'étage %d\n", passenger->get_name(passenger), this->name, this->get_floor(this));
|
||||||
this->passengers->remove_inside(this->passengers, passenger, passenger->compare);
|
this->passengers->remove_inside(this->passengers, passenger, passenger->compare);
|
||||||
|
printf("Ascenseur %s : j'ai encore %d passagers\n", this->name, this->passengers->get_size(this->passengers));
|
||||||
pthread_mutex_unlock(&this->mutex_passengers);
|
pthread_mutex_unlock(&this->mutex_passengers);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,6 +167,7 @@ Elevator *_init_Elevator(char * name){
|
|||||||
get_number_of_passengers,
|
get_number_of_passengers,
|
||||||
get_next_passenger_stop,
|
get_next_passenger_stop,
|
||||||
can_get_inside,
|
can_get_inside,
|
||||||
|
remove_passenger,
|
||||||
add_passenger,
|
add_passenger,
|
||||||
get_state,
|
get_state,
|
||||||
set_state,
|
set_state,
|
||||||
|
@ -33,6 +33,7 @@ typedef struct o_Elevator {
|
|||||||
|
|
||||||
SYNCHRONIZE PUBLIC void (*repair)(_THIS(Elevator));
|
SYNCHRONIZE PUBLIC void (*repair)(_THIS(Elevator));
|
||||||
SYNCHRONIZE PUBLIC int (*get_number_of_passengers)(_THIS(Elevator));
|
SYNCHRONIZE PUBLIC int (*get_number_of_passengers)(_THIS(Elevator));
|
||||||
|
SYNCHRONIZE PUBLIC void (*remove_passenger) (_THIS(Elevator), Passenger * passenger);
|
||||||
SYNCHRONIZE PUBLIC void (*add_passenger)(_THIS(Elevator), Passenger * passenger);
|
SYNCHRONIZE PUBLIC void (*add_passenger)(_THIS(Elevator), Passenger * passenger);
|
||||||
SYNCHRONIZE PUBLIC ELEVATOR_STATE (*get_state)(_THIS(Elevator));
|
SYNCHRONIZE PUBLIC ELEVATOR_STATE (*get_state)(_THIS(Elevator));
|
||||||
SYNCHRONIZE PUBLIC int (*get_floor)(_THIS(Elevator));
|
SYNCHRONIZE PUBLIC int (*get_floor)(_THIS(Elevator));
|
||||||
|
Loading…
Reference in New Issue
Block a user