1 /** DGui project file.
2
3 Copyright: Trogu Antonio Davide 2011-2013
4
5 License: $(HTTP boost.org/LICENSE_1_0.txt, Boost License 1.0).
6
7 Authors: Trogu Antonio Davide
8 */
9 module dgui.core.collection;
10
11 class Collection(T)
12 {
13 private T[] _t;
14
15 public final int add(T t)
16 {
17 this._t ~= t;
18 return this._t.length - 1;
19 }
20
21 public final void clear()
22 {
23 this._t.length = 0;
24 }
25
26 public final T[] get()
27 {
28 return this._t;
29 }
30
31 @property public final int length()
32 {
33 return this._t.length;
34 }
35
36 public final void remove(T t)
37 {
38 this.removeAt(this.find(t));
39 }
40
41 public final void removeAt(int idx)
42 {
43 int x = 0;
44 T[] newT = new T[this._t.length - 1];
45
46 foreach(int i, T t; this._t)
47 {
48 if(i != idx)
49 {
50 newT[x] = t;
51 x++;
52 }
53 }
54
55 this._t = newT;
56 }
57
58 public final int find(T t)
59 {
60 foreach(int i, T ft; this._t)
61 {
62 if(ft is t)
63 {
64 return i;
65 }
66 }
67
68 return -1;
69 }
70
71 public T opIndex(int i) nothrow
72 {
73 if(i >= 0 && i < this._t.length)
74 {
75 return this._t[i];
76 }
77
78 assert(false, "Index out of range");
79 }
80
81 public int opApply(int delegate(ref T) dg)
82 {
83 int res = 0;
84
85 if(this._t.length)
86 {
87 for(int i = 0; i < this._t.length; i++)
88 {
89 res = dg(this._t[i]);
90
91 if(res)
92 {
93 break;
94 }
95 }
96 }
97
98 return res;
99 }
100
101 public int opApply(int delegate(ref int, ref T) dg)
102 {
103 int res = 0;
104
105 if(this._t.length)
106 {
107 for(int i = 0; i < this._t.length; i++)
108 {
109 res = dg(i, this._t[i]);
110
111 if(res)
112 {
113 break;
114 }
115 }
116 }
117
118 return res;
119 }
120 }