Guest User

Untitled

a guest
May 16th, 2012
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.83 KB | None | 0 0
  1. /*
  2.  * what type of tree is this? singly-linked list?
  3.  * doubly linked list, recrusive linear list> is it even a list?
  4.  * I wrote this drunk. -- Dale Weiler (2012) (c) a.k.a graphitemaster
  5.  */
  6. typedef struct {
  7.     uint32_t index;
  8.     char    *fname;
  9. } t_list;
  10. typedef struct {
  11.     t_list   list;
  12.     t_list **array;
  13.     uint32_t size;
  14. } t_array;
  15.  
  16. void t_list_construct(t_list *t, const char *n) {
  17.     t->fname = strdup(n);
  18. }
  19.  
  20. void t_list_reloadall(t_list *t) {
  21.     t->index = r_loadtex(t->fname);
  22. }
  23.  
  24. void t_array_construct(t_array *a) {
  25.     a->size = 0;
  26. }
  27. t_list *t_array_add_list (t_array *a, t_list *t) {
  28.     uint32_t i;
  29.     for (i = 0; i < a->size; i++) {
  30.         if(!a->array[i]) {
  31.             a->array[i] = t;
  32.             return a->array[i];
  33.         }
  34.     }
  35.    
  36.     t_list **e = malloc(sizeof(t_list*) * a->size + 1);
  37.     memcpy(e, a->array, a->size * 4);
  38.     e[a->size] = t;
  39.     a->size ++;
  40.     free(a->array);
  41.     a->array = e;
  42.     return a->array[a->size - 1];
  43. }
  44. t_list *t_array_add_empty(t_array *a) {
  45.     return t_array_add_list(a, (t_list*)malloc(sizeof(t_list)));
  46. }
  47. t_list *t_array_add_file (t_array *a, char *p) {
  48.     uint32_t i;
  49.     for (i = 0; i < a->size; i++) {
  50.         if (a->array[i]) {
  51.             if (!strcmp(p, a->array[i]->fname))
  52.                 return a->array[i];
  53.         }
  54.     }
  55.    
  56.     t_list *x = t_array_add_empty(a);
  57.     x->fname = strdup(p);
  58.     return x;
  59. }
  60.  
  61. void t_array_remove_index(t_array *a, uint32_t i) {
  62.     if (i >= a->size) return;
  63.     free(a->array[i]);
  64.     a->array[i] = NULL;
  65. }
  66. void t_array_remove_list (t_array *a, t_list *t) {
  67.     uint32_t i;
  68.     for (i = 0; i < a->size; i++) {
  69.         if (a->array[i] == t) {
  70.             free(a->array[i]);
  71.             a->array[i] = NULL;
  72.         }
  73.     }
  74. }
  75. t_list *t_array_get(t_array *a, uint32_t i) {
  76.     if (i >= a->size) return &a->list;
  77.     return a->array[i];
  78. }
  79. void t_array_reloadall(t_array *a) {
  80.     uint32_t i;
  81.     for (i = 0; i < a->size; i++)
  82.         if (a->array[i])
  83.             t_list_reloadall(a->array[i]);
  84. }
Advertisement
Add Comment
Please, Sign In to add comment