Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <sys/stat.h>
- #include <sys/mman.h>
- #include <string.h>
- #include <sys/types.h>
- #include <fcntl.h>
- #include <unistd.h>
- #include "utils.h"
- Person *new_person, *person, *knows;
- FILE *local_persons, *local_knows;
- unsigned long person_length, knows_length;
- Person *person_map;
- unsigned int *knows_map;
- int localize(char* folder){
- printf(" localizing \n");
- unsigned int person_offset;
- unsigned long knows_offset, knows_offset2;
- int new_k_offsets = 0;
- // Files
- char* local_persons_file = makepath(folder, "localized_persons", "bin");
- char* local_knows_file = makepath(folder, "localized_knows", "bin");
- remove(local_knows_file);
- remove(local_persons_file);
- local_persons = fopen(local_persons_file, "a");
- local_knows = fopen(local_knows_file, "a");
- // sorting logic
- new_person = malloc(sizeof(Person));
- // for all persons
- for (person_offset = 0; person_offset < person_length/sizeof(Person); person_offset++) {
- person = &person_map[person_offset];
- // make the copy
- new_person->person_id = person->person_id;
- new_person->birthday = person->birthday;
- new_person->location = person->location;
- new_person->interests_first = person->interests_first;
- new_person->interest_n = person->interest_n;
- // new_person -> knows_first; weten we ook nog niet
- new_person->knows_n = 0; // only the local knows!
- // for all friends
- for (knows_offset = person->knows_first;
- knows_offset < person->knows_first + person->knows_n;
- knows_offset++) {
- knows = &person_map[knows_map[knows_offset]];
- if (person->location == knows->location) {
- // write to local_knows
- fwrite(&knows_map[knows_offset] , sizeof(unsigned int), 1, local_knows);
- // increment knows_n van new person,
- (new_person->knows_n)++;
- }
- }
- // knows first aanpassen voor deze p
- new_person->knows_first = new_k_offsets;
- // offsets aanpassen voor deze p
- new_k_offsets = new_k_offsets + new_person->knows_n;
- // write new_person to local persons
- fwrite(new_person, sizeof(Person), 1,local_persons);
- }
- // Closing up
- fclose(local_persons);
- fclose(local_knows);
- return 0;
- }
- int main(int argc, char *argv[]) {
- //char* person_output_file = makepath(argv[1], "person", "bin");
- //char* interest_output_file = makepath(argv[1], "interest", "bin");
- //char* knows_output_file = makepath(argv[1], "knows", "bin");
- // memory map files. TODO
- person_map = (Person *) mmapr(makepath(argv[1], "person", "bin"), &person_length);
- knows_map = (unsigned int *) mmapr(makepath(argv[1], "knows", "bin"), &knows_length);
- localize(argv[1]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement