mirror of
https://gitlab.com/klmp200/LO41.git
synced 2025-07-11 20:29:24 +00:00
BEHOLD ! The threadinator !
This commit is contained in:
@ -14,30 +14,28 @@ void remove_end_char(char * string, char character){
|
||||
string[string_size - 1] = '\0';
|
||||
}
|
||||
|
||||
void split(char * line, int number_to_split, char output[][LINE_BUFFER], char separator){
|
||||
List * split(char * line, char * separator){
|
||||
List * split = NEW(List);
|
||||
char * to_delete = strdup(line);
|
||||
char * to_delete_back = to_delete;
|
||||
char * token = NULL;
|
||||
char * to_delete = NULL;
|
||||
char * to_delete_back = NULL;
|
||||
int i = 0;
|
||||
|
||||
|
||||
to_delete = strdup(line);
|
||||
to_delete_back = to_delete;
|
||||
while(i < number_to_split && (token = strsep(&to_delete, &separator)) != NULL){
|
||||
strcpy(output[i], token);
|
||||
i++;
|
||||
}
|
||||
while((token = strsep(&to_delete, separator)) != NULL)
|
||||
split->insert_tail(split, (void*) token, sizeof(char) * strlen(token));
|
||||
|
||||
free(to_delete_back);
|
||||
return split;
|
||||
}
|
||||
|
||||
void parse_residents_Building(THIS(Building), char * file){
|
||||
/* File format is name;appartment_floor;destination */
|
||||
FILE * f = fopen(file, "r");
|
||||
List * line_split = NULL;
|
||||
Resident * resident = NULL;
|
||||
size_t len = LINE_BUFFER;
|
||||
char * line = NULL;
|
||||
char * trash;
|
||||
char data[3][LINE_BUFFER];
|
||||
int i = 0;
|
||||
|
||||
if (f == NULL)
|
||||
@ -45,12 +43,15 @@ void parse_residents_Building(THIS(Building), char * file){
|
||||
|
||||
while (getline(&line, &len, f) > 0) {
|
||||
remove_end_char(line, '\n');
|
||||
split(line, 3, data, ';');
|
||||
line_split = split(line, ";");
|
||||
|
||||
resident = NEW(Resident, i, data[0], (int) strtol(data[1], &trash, 10), (int) strtol(data[2], &trash, 10));
|
||||
resident = NEW(Resident, i, line_split->get_element_data(line_split, 0),
|
||||
(int) strtol(line_split->get_element_data(line_split, 1), &trash, 10),
|
||||
(int) strtol(line_split->get_element_data(line_split, 2), &trash, 10));
|
||||
this->residents->insert_tail(this->residents, resident, sizeof(Resident));
|
||||
resident->name = NULL;
|
||||
DELETE(resident);
|
||||
DELETE(line_split);
|
||||
i++;
|
||||
}
|
||||
|
||||
@ -61,10 +62,10 @@ void parse_residents_Building(THIS(Building), char * file){
|
||||
void parse_visitors_Building(THIS(Building), char * file){
|
||||
/* File format is name;contact_name */
|
||||
FILE * f = fopen(file, "r");
|
||||
List * line_split = NULL;
|
||||
Visitor * visitor = NULL;
|
||||
size_t len = LINE_BUFFER;
|
||||
char * line = NULL;
|
||||
char data[2][LINE_BUFFER];
|
||||
int i = 0;
|
||||
|
||||
if (f == NULL)
|
||||
@ -72,13 +73,17 @@ void parse_visitors_Building(THIS(Building), char * file){
|
||||
|
||||
while (getline(&line, &len, f) > 0) {
|
||||
remove_end_char(line, '\n');
|
||||
split(line, 2, data, ';');
|
||||
|
||||
visitor = NEW(Visitor, i, data[0], data[1]);
|
||||
line_split = split(line, ";");
|
||||
|
||||
visitor = NEW(Visitor, i, line_split->get_element_data(line_split, 0),
|
||||
line_split->get_element_data(line_split, 1));
|
||||
|
||||
this->visitors->insert_tail(this->visitors, visitor, sizeof(Visitor));
|
||||
visitor->contact_name = NULL;
|
||||
visitor->name = NULL;
|
||||
DELETE(visitor);
|
||||
DELETE(line_split);
|
||||
i++;
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,10 @@ typedef struct o_Building {
|
||||
DESTRUCTOR(Building);
|
||||
} Building;
|
||||
|
||||
FRIENDLY(residents, SharedData)
|
||||
FRIENDLY(visitors, SharedData)
|
||||
FRIENDLY(elevators, SharedData)
|
||||
|
||||
Building *_init_Building(char * residents_file, char * visitors_file);
|
||||
|
||||
#endif //LO41_BUILDING_H
|
||||
|
Reference in New Issue
Block a user