Advertisement
Guest User

Untitled

a guest
Sep 15th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <fcntl.h>
  4. #include <sys/stat.h>
  5. #include <sys/mman.h>
  6. #include <string.h>
  7. #include <sys/types.h>
  8. #include <fcntl.h>
  9. #include <unistd.h>
  10.  
  11.  
  12. #include "utils.h"
  13.  
  14. Person *new_person, *person, *knows;
  15. FILE *local_persons, *local_knows;
  16. unsigned long person_length, knows_length;
  17. Person *person_map;
  18. unsigned int *knows_map;
  19.  
  20. int localize(char* folder){
  21.     printf(" localizing \n");
  22.     unsigned int person_offset;
  23.     unsigned long knows_offset, knows_offset2;
  24.  
  25.     int new_k_offsets = 0;
  26.    
  27.     // Files
  28.     char* local_persons_file = makepath(folder, "localized_persons", "bin");
  29.     char* local_knows_file = makepath(folder, "localized_knows", "bin");
  30.  
  31.     remove(local_knows_file);
  32.     remove(local_persons_file);
  33.  
  34.     local_persons = fopen(local_persons_file, "a");
  35.     local_knows = fopen(local_knows_file, "a");
  36.  
  37.     // sorting logic
  38.     new_person = malloc(sizeof(Person));
  39.     // for all persons
  40.     for (person_offset = 0; person_offset < person_length/sizeof(Person); person_offset++) {
  41.         person = &person_map[person_offset];
  42.         // make the copy
  43.         new_person->person_id = person->person_id;
  44.         new_person->birthday = person->birthday;
  45.         new_person->location = person->location;
  46.         new_person->interests_first = person->interests_first;
  47.         new_person->interest_n = person->interest_n;
  48.         // new_person -> knows_first; weten we ook nog niet
  49.         new_person->knows_n = 0; // only the local knows!
  50.        
  51.         // for all friends
  52.         for (knows_offset = person->knows_first;
  53.             knows_offset < person->knows_first + person->knows_n;
  54.             knows_offset++) {
  55.             knows = &person_map[knows_map[knows_offset]];
  56.  
  57.             if (person->location == knows->location) {
  58.                 // write to local_knows
  59.                 fwrite(&knows_map[knows_offset] , sizeof(unsigned int), 1, local_knows);
  60.                 // increment knows_n van new person,
  61.                 (new_person->knows_n)++;
  62.             }
  63.         }
  64.         // knows first aanpassen voor deze p
  65.         new_person->knows_first = new_k_offsets;
  66.         // offsets aanpassen voor deze p
  67.         new_k_offsets = new_k_offsets + new_person->knows_n;
  68.         // write new_person to local persons
  69.         fwrite(new_person, sizeof(Person), 1,local_persons);
  70.     }
  71.  
  72.  
  73.     // Closing up
  74.     fclose(local_persons);
  75.     fclose(local_knows);
  76.  
  77.     return 0;
  78. }
  79.  
  80. int main(int argc, char *argv[]) {
  81.     //char* person_output_file   = makepath(argv[1], "person",   "bin");
  82.     //char* interest_output_file = makepath(argv[1], "interest", "bin");
  83.     //char* knows_output_file    = makepath(argv[1], "knows",    "bin");
  84.  
  85.     // memory map files. TODO
  86.     person_map   = (Person *)         mmapr(makepath(argv[1], "person",   "bin"), &person_length);
  87.     knows_map    = (unsigned int *)   mmapr(makepath(argv[1], "knows",    "bin"), &knows_length);
  88.  
  89.     localize(argv[1]);
  90.  
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement