1+ { ***********************************************************}
2+ { Codruts Variabile Helpers }
3+ { }
4+ { version 0.2 }
5+ { ALPHA }
6+ { }
7+ { }
8+ { }
9+ { }
10+ { }
11+ { -- WORK IN PROGRESS -- }
12+ { ***********************************************************}
13+
14+ { $SCOPEDENUMS ON}
15+
16+ unit Cod.ArrayHelpers;
17+
18+ interface
19+ uses
20+ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, IdHTTP,
21+ VCL.Graphics, Winapi.ActiveX, Winapi.URLMon, IOUtils, System.Generics.Collections,
22+ Cod.ColorUtils, System.Generics.Defaults, Vcl.Imaging.pngimage,
23+ WinApi.GdipObj, WinApi.GdipApi, Win.Registry, Cod.GDI, Cod.Types,
24+ DateUtils;
25+
26+ type
27+ // TArray colection
28+ TArrayUtils<T> = class
29+ public
30+ class function Contains (const x : T; const anArray : array of T) : boolean;
31+ class function GetIndex (const x : T; const anArray : array of T) : integer;
32+ end ;
33+
34+ // TArray generic types
35+ TArrayArray = TArray<TArray>;
36+ TArrayArrayHelper = record helper for TArrayArray
37+ public
38+ function Count : integer; overload; inline;
39+ procedure SetToLength (ALength: integer);
40+ end ;
41+
42+ TStringArray = TArray<string>;
43+ TStringArrayHelper = record helper for TStringArray
44+ public
45+ function AddValue (Value : string): integer;
46+ procedure Insert (Index: integer; Value : string);
47+ procedure Delete (Index: integer);
48+ function Count : integer; overload; inline;
49+ function Find (Value : string): integer;
50+ procedure SetToLength (ALength: integer);
51+ end ;
52+
53+ TIntArray = TArray<integer>;
54+ TIntegerArrayHelper = record helper for TIntArray
55+ public
56+ function AddValue (Value : integer): integer;
57+ procedure Insert (Index: integer; Value : integer);
58+ procedure Delete (Index: integer);
59+ function Count : integer; overload; inline;
60+ function Find (Value : integer): integer;
61+ procedure SetToLength (ALength: integer);
62+ end ;
63+
64+ TRealArray = TArray<real>;
65+ TRealArrayHelper = record helper for TRealArray
66+ public
67+ function AddValue (Value : real): integer;
68+ procedure Insert (Index: integer; Value : real);
69+ procedure Delete (Index: integer);
70+ function Count : integer; overload; inline;
71+ function Find (Value : real): integer;
72+ procedure SetToLength (ALength: integer);
73+ end ;
74+
75+ implementation
76+
77+ { TArrayUtils<T> }
78+
79+ class function TArrayUtils <T>.Contains(const x: T; const anArray: array of T): boolean;
80+ var
81+ y : T;
82+ lComparer: IEqualityComparer<T>;
83+ begin
84+ lComparer := TEqualityComparer<T>.Default;
85+ for y in anArray do
86+ begin
87+ if lComparer.Equals(x, y) then
88+ Exit(True);
89+ end ;
90+ Exit(False);
91+ end ;
92+
93+ class function TArrayUtils <T>.GetIndex(const x : T; const anArray : array of T) : integer;
94+ var
95+ I: Integer;
96+ y: T;
97+ lComparer: IEqualityComparer<T>;
98+ begin
99+ lComparer := TEqualityComparer<T>.Default;
100+ for I := Low(anArray) to High(anArray) do
101+ begin
102+ y := anArray[I];
103+
104+ if lComparer.Equals(x, y) then
105+ Exit(I);
106+ end ;
107+ Exit(-1 );
108+ end ;
109+
110+ // TArray Generic Helpers
111+ function TArrayArrayHelper.Count : integer;
112+ begin
113+ Result := length(Self);
114+ end ;
115+
116+ function TStringArrayHelper.Count : integer;
117+ begin
118+ Result := length(Self);
119+ end ;
120+
121+ function TIntegerArrayHelper.Count : integer;
122+ begin
123+ Result := length(Self);
124+ end ;
125+
126+ function TRealArrayHelper.Count : integer;
127+ begin
128+ Result := length(Self);
129+ end ;
130+
131+ procedure TArrayArrayHelper.SetToLength (ALength: integer);
132+ begin
133+ SetLength(Self, ALength);
134+ end ;
135+
136+ procedure TStringArrayHelper.SetToLength (ALength: integer);
137+ begin
138+ SetLength(Self, ALength);
139+ end ;
140+
141+ procedure TIntegerArrayHelper.SetToLength (ALength: integer);
142+ begin
143+ SetLength(Self, ALength);
144+ end ;
145+
146+ procedure TRealArrayHelper.SetToLength (ALength: integer);
147+ begin
148+ SetLength(Self, ALength);
149+ end ;
150+
151+ function TStringArrayHelper.AddValue (Value : string): integer;
152+ var
153+ AIndex: integer;
154+ begin
155+ AIndex := Length(Self);
156+ SetLength(Self, AIndex + 1 );
157+ Self[AIndex] := Value ;
158+ Result := AIndex;
159+ end ;
160+
161+ function TIntegerArrayHelper.AddValue (Value : integer): integer;
162+ var
163+ AIndex: integer;
164+ begin
165+ AIndex := Length(Self);
166+ SetLength(Self, AIndex + 1 );
167+ Self[AIndex] := Value ;
168+ Result := AIndex;
169+ end ;
170+
171+ function TRealArrayHelper.AddValue (Value : real): integer;
172+ var
173+ AIndex: integer;
174+ begin
175+ AIndex := Length(Self);
176+ SetLength(Self, AIndex + 1 );
177+ Self[AIndex] := Value ;
178+ Result := AIndex;
179+ end ;
180+
181+ procedure TStringArrayHelper.Insert (Index: integer; Value : string);
182+ var
183+ Size: integer;
184+ I: Integer;
185+ begin
186+ Size := Length(Self);
187+ SetLength(Self, Size+1 );
188+
189+ for I := Size downto Index+1 do
190+ Self[I] := Self[I-1 ];
191+ Self[Index] := Value ;
192+ end ;
193+
194+ procedure TIntegerArrayHelper.Insert (Index: integer; Value : integer);
195+ var
196+ Size: integer;
197+ I: Integer;
198+ begin
199+ Size := Length(Self);
200+ SetLength(Self, Size+1 );
201+
202+ for I := Size downto Index+1 do
203+ Self[I] := Self[I-1 ];
204+ Self[Index] := Value ;
205+ end ;
206+
207+ procedure TRealArrayHelper.Insert (Index: integer; Value : real);
208+ var
209+ Size: integer;
210+ I: Integer;
211+ begin
212+ Size := Length(Self);
213+ SetLength(Self, Size+1 );
214+
215+ for I := Size downto Index+1 do
216+ Self[I] := Self[I-1 ];
217+ Self[Index] := Value ;
218+ end ;
219+
220+ procedure TStringArrayHelper.Delete (Index: integer);
221+ var
222+ I: Integer;
223+ begin
224+ if Index <> -1 then
225+ begin
226+ for I := Index to High(Self)-1 do
227+ Self[I] := Self[I+1 ];
228+
229+ SetToLength(Length(Self)-1 );
230+ end ;
231+ end ;
232+
233+ procedure TIntegerArrayHelper.Delete (Index: integer);
234+ var
235+ I: Integer;
236+ begin
237+ if Index <> -1 then
238+ begin
239+ for I := Index to High(Self)-1 do
240+ Self[I] := Self[I+1 ];
241+
242+ SetToLength(Length(Self)-1 );
243+ end ;
244+ end ;
245+
246+ procedure TRealArrayHelper.Delete (Index: integer);
247+ var
248+ I: Integer;
249+ begin
250+ if Index <> -1 then
251+ begin
252+ for I := Index to High(Self)-1 do
253+ Self[I] := Self[I+1 ];
254+
255+ SetToLength(Length(Self)-1 );
256+ end ;
257+ end ;
258+
259+ function TStringArrayHelper.Find (Value : string): integer;
260+ var
261+ I: integer;
262+ begin
263+ Result := -1 ;
264+ for I := Low(Self) to High(Self) do
265+ if Self[I] = Value then
266+ Exit(I);
267+ end ;
268+
269+ function TIntegerArrayHelper.Find (Value : integer): integer;
270+ var
271+ I: integer;
272+ begin
273+ Result := -1 ;
274+ for I := Low(Self) to High(Self) do
275+ if Self[I] = Value then
276+ Exit(I);
277+ end ;
278+
279+ function TRealArrayHelper.Find (Value : real): integer;
280+ var
281+ I: integer;
282+ begin
283+ Result := -1 ;
284+ for I := Low(Self) to High(Self) do
285+ if Self[I] = Value then
286+ Exit(I);
287+ end ;
288+
289+ end .
0 commit comments