Advertisement
sahchas

segmentito

Nov 1st, 2018
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.12 KB | None | 0 0
  1. //En esta funcion note que habia muchos returns e  ifs super anidados
  2. //basicamente quite los elses que no valian por los returns
  3.  
  4. int search_free_memory(int limit) {
  5.  
  6.   bool keep_serching = true;
  7.  
  8.   int segments_count = list_size(segments);
  9.  
  10.   segment_t seg1;
  11.   segment_t seg2;
  12.  
  13.   if (!segments_count) {
  14.     return 0;
  15.   }
  16.  
  17.   seg1 = search_minor_segment(-1);
  18.  
  19.   if (seg1->base > limit) {
  20.     return 0;
  21.   }
  22.  
  23.   if (segments_count == 1) {
  24.    
  25.     if (tamanio - seg1->base - seg1->limit > limit) {
  26.       return seg1->base + seg1->limit + 1;
  27.     }
  28.  
  29.     return -1;
  30.  
  31.   }
  32.  
  33.   int i = 0;
  34.  
  35.   //Aca asigna el seg1 de la misma manera que en la linea 17, medio al cuete
  36.   seg1 = search_minor_segment(-1);
  37.  
  38.   while (keep_serching && i < segments_count) {
  39.    
  40.     seg2 = search_minor_segment(seg->base + seg->limit);
  41.    
  42.     if (seg2->base - seg1->limit - seg1->base > limit) {
  43.       return seg1->base + seg1->limit + 1;
  44.     }
  45.  
  46.     //Esta condicion esta medio rara porque la variable keep_serching
  47.     //nunca cambia, asi que no se
  48.     if (i == segments_count - 1) {
  49.      
  50.       if (memoria - seg2->limit - seg2->base > limit) {
  51.         return seg2->limit + seg2->base + 1;
  52.       }
  53.  
  54.       return -1;
  55.     }
  56.  
  57.     i++;
  58.     seg1 = seg2;
  59.   }
  60.  
  61.   return -1;
  62. }
  63.  
  64. segment_t search_next_segment(int from) {
  65.  
  66.   segment_t segment;
  67.   int actual_minor_base = 99999;
  68.  
  69.   void get_minor(segment_t* s) {
  70.     if (s->base > from && s->base < actual_minor_base) {
  71.       segment = s;
  72.       actual_minor_base = s->base;
  73.     }
  74.   }
  75.  
  76.   //Faltaba punto y coma
  77.   list_iterate(segments, get_minor());
  78.  
  79.   return segment;
  80. }
  81.  
  82. memory_information_t save_seg(char** values) {
  83.  
  84.   //¿Esto no devolveria siempre 4 porque es el tamaño de un puntero?
  85.   int count_values = sizeof(values);
  86.  
  87.   for (int i = 0; i < count_values; i++) {
  88.     char* value = values[i];
  89.   }
  90.  
  91.   int limit = count_values * tamanio_maximo_linea;
  92.   int base = search_free_memory(limit);
  93.  
  94.   if (base == -1) {
  95.     //ERROR: SIN MEMORIA
  96.   } else {
  97.     segment_t segment = create_segment(limit, base);
  98.     list_add(segments, segment);
  99.   }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement