Advertisement
S4T3K

Dynamic arrays

Sep 10th, 2014
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 1.33 KB | None | 0 0
  1. #include <YSI\y_malloc>
  2.  
  3. #define Dynamic:%1; Alloc:%1 = calloc(2);
  4.  
  5. #define add_slot.%0(); DYNAMIC_ARRAYS_add_slot(%0);
  6.  
  7. #define pop_slot.%0(); DYNAMIC_ARRAYS_pop_slot(%0);
  8.  
  9. #define set.%0(%1,%2); DYNAMIC_ARRAYS_set(%0, %1, %2);
  10.        
  11. #define get.%0(%1); DYNAMIC_ARRAYS_get(%0, %1);
  12.  
  13. #define dsizeof(%0); Malloc_SlotSize(%0);
  14.  
  15. stock DYNAMIC_ARRAYS_add_slot(Alloc:mem)
  16.     return realloc(mem, 1);
  17.  
  18. stock DYNAMIC_ARRAYS_set(Alloc:mem, index, value)
  19.     return mset(mem, index, value);
  20.  
  21. stock DYNAMIC_ARRAYS_get(Alloc:mem, index)
  22.     return mget(mem, index);
  23.  
  24. stock DYNAMIC_ARRAYS_pop_slot(Alloc:mem)
  25.     return unalloc(mem, 1);
  26.  
  27.  
  28. stock realloc(Alloc:mem, size)
  29. {
  30.     new old = Malloc_SlotSize(mem);
  31.     new Alloc:save = malloc(old);
  32.    
  33.     for(new i = 0; i <= old; ++i)
  34.         mset(save, i, mget(mem, i));
  35.  
  36.     free(mem);
  37.  
  38.     mem = calloc(size+old);
  39.     for(new i = 0; i <= old; ++i)
  40.         mset(save, i, mget(save, i));
  41.  
  42.     free(save);
  43.     return 1;
  44. }
  45.  
  46. stock unalloc(Alloc:mem, size)
  47. {
  48.     new old = Malloc_SlotSize(mem);
  49.     new Alloc:save = malloc(old-size);
  50.    
  51.     for(new i = 1; i <= old-size; ++i)
  52.         mset(save, i, mget(mem, i));
  53.  
  54.     free(mem);
  55.  
  56.     mem = calloc(old-size);
  57.     for(new i = 1; i <= old-size; ++i)
  58.         mset(save, i, mget(save, i));
  59.  
  60.     free(save);
  61.     return 1;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement