Advertisement
Zoadian

array.d

Jul 15th, 2011
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 2.14 KB | None | 0 0
  1. module util.array;
  2. import std.stdio;
  3.  
  4. /**
  5. only for dynamic arrays
  6. */
  7.  
  8.  
  9.  
  10. T[] pop_back(T)(ref T[] t)
  11. {
  12.     T r = t[$];
  13.     t.length = t.length - 1;
  14.     return r;
  15. }
  16. unittest
  17. {
  18.     //TODO:
  19. }
  20.  
  21. alias add push_back;
  22. T[] add(T)(ref T[] t, T el)
  23. {
  24.     t ~= el;
  25.     return t;
  26. }
  27. unittest
  28. {
  29.     //TODO:
  30. }
  31.  
  32. T[] insert(T)(ref T[] t, T el, uint pos)
  33. {
  34.     t.length = t.length + 1;
  35.     t[pos+1..$] = t[pos..$-1];
  36.     t[pos] = el;
  37.     return t;
  38. }
  39. unittest
  40. {
  41.     //TODO:
  42. }
  43.  
  44. T[] remove(T)(ref T[] t, T el)
  45. {
  46.     t = t.removeAt(t.indexOf(el));
  47.     return t;
  48. }
  49. unittest
  50. {
  51.     //TODO:
  52. }
  53.  
  54. T[] removeUO(T)(ref T[] t, T el)
  55. {
  56.     t = t.removeAtUO(t.indexOf(el));
  57.     return t;
  58. }
  59. unittest
  60. {
  61.     //TODO:
  62. }
  63.  
  64. T[] removeAtUO(T)(ref T[] t, uint pos)
  65. {
  66.     assert(pos < t.length);
  67.     /*
  68.     if(pos >= t.length)
  69.         return t;
  70.     */
  71.     if (pos != t.length - 1)
  72.     t[pos] = t[t.length - 1];
  73.     t.length = t.length -1;
  74.     return t;
  75. }
  76. unittest
  77. {
  78.     uint[] u= [1,2,3,4,5,6,7,8,9];
  79.     u.removeAtUO(3);
  80.     assert(u[0] == 1);
  81.     assert(u[1] == 2);
  82.     assert(u[2] == 3);
  83.     assert(u[3] == 9);
  84.     assert(u.length == 8);
  85.     u.removeAtUO(5);
  86.     assert(u[0] == 1);
  87.     assert(u[5] == 8);
  88.     assert(u.length == 7);
  89. }
  90.  
  91. T[] removeAt(T)(ref T[] t, uint pos)
  92. {
  93.     assert(pos < t.length);
  94.     if(pos == 0 && t.length <= 1)
  95.         return null;
  96.     if(pos == 0 && t.length > 1)
  97.         return t[1..$];
  98.     T[] tmp = t[0..pos];
  99.     tmp ~= t[(pos+1)..$];
  100.     t=tmp;
  101.     return tmp;
  102. }
  103. unittest
  104. {
  105.     uint[] u= [1,2,3,4,5,6,7,8,9];
  106.     u.removeAt(3);
  107.     assert(u[0] == 1);
  108.     assert(u[1] == 2);
  109.     assert(u[2] == 3);
  110.     assert(u[3] == 5);
  111.     assert(u.length == 8);
  112.     u.removeAt(5);
  113.     assert(u[0] == 1);
  114.     assert(u[5] == 8);
  115.     assert(u.length == 7);
  116. }
  117.  
  118. bool has(T)(T[] t, T el)
  119. {
  120.     foreach(T tx; t)
  121.     {
  122.         if(el == tx)
  123.         {
  124.             return true;
  125.         }
  126.     }
  127.     return false;  
  128. }
  129. unittest
  130. {
  131.     uint[] u= [1,2,3,4,5,6,7,8,9];
  132.     uint x = 6;
  133.     assert(u.has(x) == true);
  134.     x = 12;
  135.     assert(u.has(x) == false);
  136. }
  137.  
  138. uint indexOf(T)(T[] t, T el)
  139. {
  140.     for(int i=0; i<t.length; ++i)
  141.     {
  142.         if(el == t[i])
  143.             return i;
  144.     }
  145.     throw new Exception("Element not found");
  146. }
  147. unittest
  148. {
  149.     uint[] u= [1,2,3,4,5,6,7,8,9];
  150.     uint x = 5;
  151.     assert(u.indexOf(x) == 4);
  152.     x = 8;
  153.     assert(u.indexOf(x) == 7);
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement