EnzoMetlc

[Include] iterate.inc

Apr 5th, 2016
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 1.30 KB | None | 0 0
  1. /* Natives
  2.  
  3. native Iter_Add(Iterator:Name, value);
  4. native Iter_Remove(Iterator:Name, value)
  5. native Iter_Clear(Iterator:Name);
  6. native Iter_Count(Iterator:Name);
  7. native Iter_Contains(Iterator:Name, value);
  8. */
  9.  
  10. #define Iterator:%1[%2]         Iter%1_list[%2], Iter%1_sort[%2], Iter%1_count
  11.  
  12. #define Iter_Add(%1,%2)         EditIter_func(%2, Iter%1_list, Iter%1_sort, Iter%1_count, sizeof(Iter%1_list), 1)
  13. #define Iter_Remove(%1,%2)      EditIter_func(%2, Iter%1_list, Iter%1_sort, Iter%1_count, sizeof(Iter%1_list), 0)
  14. #define Iter_Clear(%1)          IterClear_func(Iter%1_list, Iter%1_list, Iter%1_count, sizeof(Iter%1_list))
  15. #define Iter_Count(%1)          (Iter%1_count)
  16. #define Iter_Contains(%1,%2)    (Iter%1_list[%2])
  17. #define Iter_Random(%1)         (Iter%1_sort[random(Iter%1_count)])
  18. #define foreach(%1,%2)          for(new %2 = Iter%1_sort[0], %2_count; %2_count < Iter%1_count; %2 = Iter%1_sort[++%2_count])
  19.  
  20.    
  21. stock EditIter_func(idx, list[], sort[], &iter_count, const size, const value)
  22. {
  23.     new count;
  24.     list[idx] = value;
  25.    
  26.     for(new i = 0; i < size; i++)
  27.     {
  28.         if(list[i]) sort[count] = i, count ++;
  29.     }
  30.    
  31.     iter_count = count;
  32.     return 1;
  33. }
  34.  
  35. stock IterClear_func(list[], sort[], &iter_count, const size)
  36. {
  37.     for(new i = 0; i < size; i++)
  38.     {
  39.         list[i] = 0;
  40.         sort[i] = 0;
  41.     }
  42.    
  43.     iter_count = 0;
  44.     return 1;
  45. }
Add Comment
Please, Sign In to add comment