mirror of
https://gitlab.com/klmp200/LO41.git
synced 2024-11-23 17:23:21 +00:00
79 lines
2.1 KiB
C
79 lines
2.1 KiB
C
//
|
|
// Created by Antoine Bartuccio on 20/06/2018.
|
|
//
|
|
|
|
#include "Passenger.h"
|
|
|
|
int compare_Passenger(void * passenger1, void * passenger2){
|
|
return (strcmp(((Passenger*) passenger1)->get_name((Passenger*) passenger1),
|
|
((Passenger*) passenger2)->get_name((Passenger*) passenger2)) == 0);
|
|
}
|
|
|
|
int get_destination_Passenger(THIS(Passenger)){
|
|
if (this->type == RESIDENT)
|
|
return this->resident->get_destination(this->resident);
|
|
if (this->type == VISITOR)
|
|
return this->visitor->get_destination(this->visitor);
|
|
return -1;
|
|
}
|
|
|
|
int get_id_Passenger(THIS(Passenger)){
|
|
if (this->type == RESIDENT)
|
|
return this->resident->get_id(this->resident);
|
|
if (this->type == VISITOR)
|
|
return this->visitor->get_id(this->visitor);
|
|
return -1;
|
|
}
|
|
|
|
char *get_name_Passenger(THIS(Passenger)){
|
|
if (this->type == RESIDENT)
|
|
return this->resident->get_name(this->resident);
|
|
if (this->type == VISITOR)
|
|
return this->visitor->get_name(this->visitor);
|
|
return NULL;
|
|
}
|
|
|
|
void *runnable_Passenger(void * void_this){
|
|
Passenger *this = (Passenger*) void_this;
|
|
if (this->type == RESIDENT)
|
|
this->resident->runnable((void*)this->resident);
|
|
if (this->type == VISITOR)
|
|
this->visitor->runnable((void*)this->visitor);
|
|
return NULL;
|
|
}
|
|
|
|
void set_thread_number_Passenger(THIS(Passenger), int thread_number){
|
|
if (this->type == RESIDENT)
|
|
this->resident->set_thread_number(this->resident, thread_number);
|
|
if (this->type == VISITOR)
|
|
this->visitor->set_thread_number(this->visitor, thread_number);
|
|
}
|
|
|
|
void _free__Passenger(THIS(Passenger)){
|
|
free(this);
|
|
}
|
|
|
|
Passenger *_init_Passenger(void* passenger_data, PASSENGER_TYPE type){
|
|
Passenger * new_passenger = malloc_or_die(sizeof(Passenger));
|
|
|
|
new_passenger->resident = NULL;
|
|
new_passenger->visitor = NULL;
|
|
new_passenger->type = type;
|
|
if (type == RESIDENT)
|
|
new_passenger->resident = (Resident*) passenger_data;
|
|
|
|
if (type == VISITOR)
|
|
new_passenger->visitor = (Visitor*) passenger_data;
|
|
|
|
//new_passenger->compare = compare_Passenger;
|
|
LINK_ALL(Passenger, new_passenger,
|
|
get_id,
|
|
get_name,
|
|
get_destination,
|
|
compare,
|
|
runnable
|
|
)
|
|
|
|
return new_passenger;
|
|
}
|