瀏覽代碼

[commons] some fixes XE4 compatibility

Exilon 5 年之前
父節點
當前提交
03c8a284ec
共有 2 個文件被更改,包括 33 次插入10 次删除
  1. 4 0
      Quick.Arrays.Helper.pas
  2. 29 10
      Quick.Commons.pas

+ 4 - 0
Quick.Arrays.Helper.pas

@@ -93,7 +93,11 @@ end;
 
 
 class procedure TArrayHelper<T>.Remove(var aArray : TArray<T>; aIndex : Integer);
 class procedure TArrayHelper<T>.Remove(var aArray : TArray<T>; aIndex : Integer);
 begin
 begin
+  {$IFDEF DELPHIXE7_UP}
   System.Delete(aArray,aIndex,1);
   System.Delete(aArray,aIndex,1);
+  {$ELSE}
+  TArrayUtil<T>.Delete(aArray,aIndex);
+  {$ENDIF}
 end;
 end;
 
 
 class procedure TArrayHelper<T>.Insert(var aArray : TArray<T>; aItem : T; aIndex : Integer);
 class procedure TArrayHelper<T>.Insert(var aArray : TArray<T>; aItem : T; aIndex : Integer);

+ 29 - 10
Quick.Commons.pas

@@ -170,6 +170,13 @@ type
   end;
   end;
 
 
   {$IFNDEF FPC}
   {$IFNDEF FPC}
+
+  {$IFNDEF DELPHIXE7_UP}
+  TArrayUtil<T> = class
+    class procedure Delete(var aArray : TArray<T>; aIndex : Integer);
+  end;
+  {$ENDIF}
+
   TArrayOfStringHelper = record helper for TArray<string>
   TArrayOfStringHelper = record helper for TArray<string>
   public
   public
     function Any : Boolean; overload;
     function Any : Boolean; overload;
@@ -1609,10 +1616,6 @@ end;
 function TArrayOfStringHelper.Remove(const aValue : string) : Boolean;
 function TArrayOfStringHelper.Remove(const aValue : string) : Boolean;
 var
 var
   i : Integer;
   i : Integer;
-  {$IFNDEF DELPHIXE7_UP}
-  n : Integer;
-  len : Integer;
-  {$ENDIF}
 begin
 begin
   for i := Low(Self) to High(Self) do
   for i := Low(Self) to High(Self) do
   begin
   begin
@@ -1621,12 +1624,7 @@ begin
       {$IFDEF DELPHIXE7_UP}
       {$IFDEF DELPHIXE7_UP}
       System.Delete(Self,i,1);
       System.Delete(Self,i,1);
       {$ELSE}
       {$ELSE}
-      len := Length(Self);
-      if (len > 0) and (i < len) then
-      begin
-        for n := i + 1 to len - 1 do Self[n - 1] := Self[n];
-        SetLength(Self, len - 1);
-      end;
+      TArrayUtil<string>.Delete(Self,i);
       {$ENDIF}
       {$ENDIF}
       Exit(True);
       Exit(True);
     end;
     end;
@@ -1742,7 +1740,11 @@ begin
   begin
   begin
     if CompareText(fItems[i].Name,aName) = 0 then
     if CompareText(fItems[i].Name,aName) = 0 then
     begin
     begin
+      {$IFDEF DELPHIXE7_UP}
       System.Delete(fItems,i,1);
       System.Delete(fItems,i,1);
+      {$ELSE}
+      TArrayUtil<TPairItem>.Delete(fItems,i);
+      {$ENDIF}
       Exit(True);
       Exit(True);
     end;
     end;
   end;
   end;
@@ -1885,6 +1887,23 @@ begin
   if aCondition then Result := aIfIsTrue else Result := aIfIsFalse;
   if aCondition then Result := aIfIsTrue else Result := aIfIsFalse;
 end;
 end;
 
 
+{$IFNDEF FPC}
+  {$IFNDEF DELPHIXE7_UP}
+  class procedure TArrayUtil<T>.Delete(var aArray : TArray<T>; aIndex : Integer);
+  var
+    n : Integer;
+    len : Integer;
+  begin
+    len := Length(aArray);
+    if (len > 0) and (aIndex < len) then
+    begin
+      for n := aIndex + 1 to len - 1 do aArray[n - 1] := aArray[n];
+      SetLength(aArray, len - 1);
+    end;
+  end;
+  {$ENDIF}
+{$ENDIF}
+
 {$IFNDEF NEXTGEN}
 {$IFNDEF NEXTGEN}
 initialization
 initialization
   try
   try