Browse Source

New Quick.Arrays.Helper

Unknown 6 năm trước cách đây
mục cha
commit
9dbb4d55bd
1 tập tin đã thay đổi với 194 bổ sung0 xóa
  1. 194 0
      Quick.Arrays.Helper.pas

+ 194 - 0
Quick.Arrays.Helper.pas

@@ -0,0 +1,194 @@
+{ ***************************************************************************
+
+  Copyright (c) 2016-2019 Kike Pérez
+
+  Unit        : Quick.Arrays.Helper
+  Description : Array helpers
+  Author      : Kike Pérez
+  Version     : 1.0
+  Created     : 24/03/2019
+  Modified    : 29/03/2019
+
+  This file is part of QuickLib: https://github.com/exilon/QuickLib
+
+ ***************************************************************************
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+ *************************************************************************** }
+
+unit Quick.Arrays.Helper;
+
+{$i QuickLib.inc}
+
+interface
+
+uses
+  Generics.Defaults;
+
+type
+
+  TArrayHelper<T> = class
+  public
+    class function Count(var aArray : TArray<T>) : Integer;
+    class procedure Add(var aArray : TArray<T>; aItem : T); static;
+    class procedure Insert(var aArray : TArray<T>; aItem : T; aIndex : Integer); static;
+    class procedure Remove(var aArray : TArray<T>; aIndex : Integer); static;
+    class function Contains(var aArray : TArray<T>; aItem : T) : Boolean;
+    class function IndexOf(var aArray : TArray<T>; aItem : T) : Integer;
+  end;
+
+  {$IFDEF FPC}
+  TStringArray = TArray<string>;
+  {$ENDIF}
+
+  TStringArrayHelper = record Helper for {$IFNDEF FPC}TArray<string>{$ELSE}TStringArray{$ENDIF}
+    function Count : Integer;
+    procedure Add(const aValue : string);
+    procedure Insert(const aValue : string; aIndex : Integer);
+    procedure Remove(aIndex : Integer);
+    function Contains(const aItem : string) : Boolean;
+    function IndexOf(const aItem : string) : Integer;
+  end;
+
+  {$IFDEF FPC}
+  TIntegerArray = TArray<Integer>;
+  {$ENDIF}
+
+  TIntegerArrayHelper = record Helper for {$IFNDEF FPC}TArray<Integer>{$ELSE}TIntegerArray{$ENDIF}
+    function Count : Integer;
+    procedure Add(aValue : Integer);
+    procedure Insert(const aValue : Integer; aIndex : Integer);
+    procedure Remove(aIndex : Integer);
+    function Contains(aItem : Integer) : Boolean;
+    function IndexOf(aItem : Integer) : Integer;
+  end;
+
+
+implementation
+
+
+{  TArray  }
+
+class function TArrayHelper<T>.Count(var aArray : TArray<T>) : Integer;
+begin
+  Result := High(aArray)+1;
+end;
+
+class procedure TArrayHelper<T>.Add(var aArray : TArray<T>; aItem : T);
+begin
+  SetLength(aArray, Length(aArray) + 1);
+  aArray[High(aArray)] := aItem;
+end;
+
+class procedure TArrayHelper<T>.Remove(var aArray : TArray<T>; aIndex : Integer);
+begin
+  System.Delete(aArray,aIndex,1);
+end;
+
+class procedure TArrayHelper<T>.Insert(var aArray : TArray<T>; aItem : T; aIndex : Integer);
+begin
+  System.Insert(aItem,aArray,aIndex);
+end;
+
+class function TArrayHelper<T>.Contains(var aArray : TArray<T>; aItem : T) : Boolean;
+var
+  icomparer : IEqualityComparer<T>;
+  i : Integer;
+begin
+  Result := False;
+  icomparer := TEqualityComparer<T>.Default;
+  for i := Low(aArray) to High(aArray) do
+  begin
+    if icomparer.Equals(aArray[i],aItem) then Exit(True);
+  end;
+end;
+
+class function TArrayHelper<T>.IndexOf(var aArray : TArray<T>; aItem : T) : Integer;
+var
+  icomparer : IEqualityComparer<T>;
+  i : Integer;
+begin
+  icomparer := TEqualityComparer<T>.Default;
+  for i := Low(aArray) to High(aArray) do
+  begin
+    if icomparer.Equals(aArray[i],aItem) then Exit(i);
+  end;
+  Result := -1;
+end;
+
+{  TStringArrayHelper  }
+
+function TStringArrayHelper.Count : Integer;
+begin
+  Result := TArrayHelper<string>.Count(Self);
+end;
+
+procedure TStringArrayHelper.Add(const aValue : string);
+begin
+  TArrayHelper<string>.Add(Self,aValue);
+end;
+
+procedure TStringArrayHelper.Insert(const aValue : string; aIndex : Integer);
+begin
+  TArrayHelper<string>.Insert(Self,aValue,aIndex);
+end;
+
+procedure TStringArrayHelper.Remove(aIndex : Integer);
+begin
+  TArrayHelper<string>.Remove(Self,aIndex);
+end;
+
+function TStringArrayHelper.Contains(const aItem : string) : Boolean;
+begin
+  Result := TArrayHelper<string>.Contains(Self,aItem);
+end;
+
+function TStringArrayHelper.IndexOf(const aItem : string) : Integer;
+begin
+  Result := TArrayHelper<string>.IndexOf(Self,aItem);
+end;
+
+{  TIntegerArrayHelper  }
+
+function TIntegerArrayHelper.Count : Integer;
+begin
+  Result := TArrayHelper<Integer>.Count(Self);
+end;
+
+procedure TIntegerArrayHelper.Add(aValue : Integer);
+begin
+  TArrayHelper<Integer>.Add(Self,aValue);
+end;
+
+procedure TIntegerArrayHelper.Insert(const aValue : Integer; aIndex : Integer);
+begin
+  TArrayHelper<Integer>.Insert(Self,aValue,aIndex);
+end;
+
+procedure TIntegerArrayHelper.Remove(aIndex : Integer);
+begin
+  TArrayHelper<Integer>.Remove(Self,aIndex);
+end;
+
+function TIntegerArrayHelper.Contains(aItem : Integer) : Boolean;
+begin
+  Result := TArrayHelper<Integer>.Contains(Self,aItem);
+end;
+
+function TIntegerArrayHelper.IndexOf(aItem : Integer) : Integer;
+begin
+  Result := TArrayHelper<Integer>.IndexOf(Self,aItem);
+end;
+
+end.