Browse Source

* Overloads to allow passing strings to Array of Char

michael 5 years ago
parent
commit
f3585cf8e9
1 changed files with 93 additions and 8 deletions
  1. 93 8
      packages/rtl/sysutils.pas

+ 93 - 8
packages/rtl/sysutils.pas

@@ -52,6 +52,7 @@ type
   TMonthNames = TMonthNameArray;
   TMonthNames = TMonthNameArray;
   TDayNames = array[0..6] of string;
   TDayNames = array[0..6] of string;
 
 
+
 {*****************************************************************************
 {*****************************************************************************
                             Exception handling
                             Exception handling
 *****************************************************************************}
 *****************************************************************************}
@@ -725,6 +726,7 @@ Type
     Class Function ToNativeInt(const S: string): NativeInt; overload; static; inline;
     Class Function ToNativeInt(const S: string): NativeInt; overload; static; inline;
     Class Function ToInteger(const S: string): Integer; overload; static; inline;
     Class Function ToInteger(const S: string): Integer; overload; static; inline;
     Class Function UpperCase(const S: string): string; overload; static; inline;
     Class Function UpperCase(const S: string): string; overload; static; inline;
+    Class Function ToCharArray(const S : String) : TCharArray; static;
     Function CompareTo(const B: string): Integer;
     Function CompareTo(const B: string): Integer;
     Function Contains(const AValue: string): Boolean;
     Function Contains(const AValue: string): Boolean;
     Function CountChar(const C: Char): SizeInt;
     Function CountChar(const C: Char): SizeInt;
@@ -742,8 +744,11 @@ Type
     Function IndexOf(AValue: Char; StartIndex: SizeInt; ACount: SizeInt): SizeInt; overload;
     Function IndexOf(AValue: Char; StartIndex: SizeInt; ACount: SizeInt): SizeInt; overload;
     Function IndexOf(const AValue: string; StartIndex: SizeInt; ACount: SizeInt): SizeInt; overload;
     Function IndexOf(const AValue: string; StartIndex: SizeInt; ACount: SizeInt): SizeInt; overload;
     Function IndexOfUnQuoted(const AValue: string; StartQuote, EndQuote: Char; StartIndex: SizeInt = 0): SizeInt; overload;
     Function IndexOfUnQuoted(const AValue: string; StartQuote, EndQuote: Char; StartIndex: SizeInt = 0): SizeInt; overload;
+    Function IndexOfAny(const AnyOf: string): SizeInt; overload;
     Function IndexOfAny(const AnyOf: array of Char): SizeInt; overload;
     Function IndexOfAny(const AnyOf: array of Char): SizeInt; overload;
+    Function IndexOfAny(const AnyOf: String; StartIndex: SizeInt): SizeInt; overload;
     Function IndexOfAny(const AnyOf: array of Char; StartIndex: SizeInt): SizeInt; overload;
     Function IndexOfAny(const AnyOf: array of Char; StartIndex: SizeInt): SizeInt; overload;
+    Function IndexOfAny(const AnyOf: String; StartIndex: SizeInt; ACount: SizeInt): SizeInt; overload;
     Function IndexOfAny(const AnyOf: array of Char; StartIndex: SizeInt; ACount: SizeInt): SizeInt; overload;
     Function IndexOfAny(const AnyOf: array of Char; StartIndex: SizeInt; ACount: SizeInt): SizeInt; overload;
     Function IndexOfAny(const AnyOf: array of String): SizeInt; overload;
     Function IndexOfAny(const AnyOf: array of String): SizeInt; overload;
     Function IndexOfAny(const AnyOf: array of String; StartIndex: SizeInt): SizeInt; overload;
     Function IndexOfAny(const AnyOf: array of String; StartIndex: SizeInt): SizeInt; overload;
@@ -778,18 +783,27 @@ Type
     Function Replace(OldChar: Char; NewChar: Char; ReplaceFlags: TReplaceFlags): string; overload;
     Function Replace(OldChar: Char; NewChar: Char; ReplaceFlags: TReplaceFlags): string; overload;
     Function Replace(const OldValue: string; const NewValue: string): string; overload;
     Function Replace(const OldValue: string; const NewValue: string): string; overload;
     Function Replace(const OldValue: string; const NewValue: string; ReplaceFlags: TReplaceFlags): string; overload;
     Function Replace(const OldValue: string; const NewValue: string; ReplaceFlags: TReplaceFlags): string; overload;
+    Function Split(const Separators: String): TStringArray; overload;
     Function Split(const Separators: array of Char): TStringArray; overload;
     Function Split(const Separators: array of Char): TStringArray; overload;
+    Function Split(const Separators: string; ACount: SizeInt): TStringArray; overload;
     Function Split(const Separators: array of Char; ACount: SizeInt): TStringArray; overload;
     Function Split(const Separators: array of Char; ACount: SizeInt): TStringArray; overload;
+    Function Split(const Separators: string; Options: TStringSplitOptions): TStringArray; overload;
     Function Split(const Separators: array of Char; Options: TStringSplitOptions): TStringArray; overload;
     Function Split(const Separators: array of Char; Options: TStringSplitOptions): TStringArray; overload;
+    Function Split(const Separators: string; ACount: SizeInt; Options: TStringSplitOptions): TStringArray; overload;
     Function Split(const Separators: array of Char; ACount: SizeInt; Options: TStringSplitOptions): TStringArray; overload;
     Function Split(const Separators: array of Char; ACount: SizeInt; Options: TStringSplitOptions): TStringArray; overload;
     Function Split(const Separators: array of string): TStringArray; overload;
     Function Split(const Separators: array of string): TStringArray; overload;
     Function Split(const Separators: array of string; ACount: SizeInt): TStringArray; overload;
     Function Split(const Separators: array of string; ACount: SizeInt): TStringArray; overload;
     Function Split(const Separators: array of string; Options: TStringSplitOptions): TStringArray; overload;
     Function Split(const Separators: array of string; Options: TStringSplitOptions): TStringArray; overload;
     Function Split(const Separators: array of string; ACount: SizeInt; Options: TStringSplitOptions): TStringArray; overload;
     Function Split(const Separators: array of string; ACount: SizeInt; Options: TStringSplitOptions): TStringArray; overload;
+    Function Split(const Separators: String; AQuote: Char): TStringArray; overload;
     Function Split(const Separators: array of Char; AQuote: Char): TStringArray; overload;
     Function Split(const Separators: array of Char; AQuote: Char): TStringArray; overload;
+    Function Split(const Separators: String; AQuoteStart, AQuoteEnd: Char): TStringArray; overload;
     Function Split(const Separators: array of Char; AQuoteStart, AQuoteEnd: Char): TStringArray; overload;
     Function Split(const Separators: array of Char; AQuoteStart, AQuoteEnd: Char): TStringArray; overload;
+    Function Split(const Separators: string; AQuoteStart, AQuoteEnd: Char; Options: TStringSplitOptions): TStringArray; overload;
     Function Split(const Separators: array of Char; AQuoteStart, AQuoteEnd: Char; Options: TStringSplitOptions): TStringArray; overload;
     Function Split(const Separators: array of Char; AQuoteStart, AQuoteEnd: Char; Options: TStringSplitOptions): TStringArray; overload;
+    Function Split(const Separators: string; AQuoteStart, AQuoteEnd: Char; ACount: SizeInt): TStringArray; overload;
     Function Split(const Separators: array of Char; AQuoteStart, AQuoteEnd: Char; ACount: SizeInt): TStringArray; overload;
     Function Split(const Separators: array of Char; AQuoteStart, AQuoteEnd: Char; ACount: SizeInt): TStringArray; overload;
+    Function Split(const Separators: string; AQuoteStart, AQuoteEnd: Char; ACount: SizeInt; Options: TStringSplitOptions): TStringArray; overload;
     Function Split(const Separators: array of Char; AQuoteStart, AQuoteEnd: Char; ACount: SizeInt; Options: TStringSplitOptions): TStringArray; overload;
     Function Split(const Separators: array of Char; AQuoteStart, AQuoteEnd: Char; ACount: SizeInt; Options: TStringSplitOptions): TStringArray; overload;
     Function Split(const Separators: array of string; AQuote: Char): TStringArray; overload;
     Function Split(const Separators: array of string; AQuote: Char): TStringArray; overload;
     Function Split(const Separators: array of string; AQuoteStart, AQuoteEnd: Char): TStringArray; overload;
     Function Split(const Separators: array of string; AQuoteStart, AQuoteEnd: Char): TStringArray; overload;
@@ -5279,8 +5293,7 @@ begin
 end;
 end;
 
 
 
 
-class function TStringHelper.Format(const AFormat: string;
-  const args: array of jsValue): string;
+class function TStringHelper.Format(const AFormat: string; const args: array of JSValue): string;
 begin
 begin
   Result:=Sysutils.Format(AFormat,Args);
   Result:=Sysutils.Format(AFormat,Args);
 end;
 end;
@@ -5298,7 +5311,7 @@ begin
 end;
 end;
 
 
 
 
-Class Function TStringHelper.Join(const Separator: string; const Values: array of JSValue): string; overload;
+class function TStringHelper.Join(const Separator: string; const Values: array of JSValue): string;
 
 
 begin
 begin
   Result:=TJSArray(Values).Join(Separator);
   Result:=TJSArray(Values).Join(Separator);
@@ -5393,6 +5406,17 @@ begin
   Result:=sysutils.Uppercase(S);
   Result:=sysutils.Uppercase(S);
 end;
 end;
 
 
+class function TStringHelper.ToCharArray(const S: String): TCharArray;
+
+Var
+  I,Len: integer;
+
+begin
+  Len:=System.Length(S);
+  SetLength(Result,Len);
+  For I:=1 to Len do
+    Result[I-1]:=S[I];
+end;
 
 
 function TStringHelper.CompareTo(const B: string): Integer;
 function TStringHelper.CompareTo(const B: string): Integer;
 begin
 begin
@@ -5500,7 +5524,7 @@ begin
 end;
 end;
 
 
 
 
-function TStringHelper.Format(const args: array of JSValue): string;
+function TStringHelper.Format(const args: array of jsValue): string;
 
 
 begin
 begin
   Result:=Sysutils.Format(Self,Args);
   Result:=Sysutils.Format(Self,Args);
@@ -5641,12 +5665,22 @@ begin
     end;
     end;
 end;
 end;
 
 
+function TStringHelper.IndexOfAny(const AnyOf: string): SizeInt;
+begin
+  Result:=IndexOfAny(AnyOf.ToCharArray);
+end;
+
 
 
 function TStringHelper.IndexOfAny(const AnyOf: array of Char): SizeInt;
 function TStringHelper.IndexOfAny(const AnyOf: array of Char): SizeInt;
 begin
 begin
   Result:=IndexOfAny(AnyOf,0,Length);
   Result:=IndexOfAny(AnyOf,0,Length);
 end;
 end;
 
 
+function TStringHelper.IndexOfAny(const AnyOf: String; StartIndex: SizeInt): SizeInt;
+begin
+  Result:=IndexOfAny(AnyOf.ToCharArray,StartIndex);
+end;
+
 
 
 function TStringHelper.IndexOfAny(const AnyOf: array of Char;
 function TStringHelper.IndexOfAny(const AnyOf: array of Char;
   StartIndex: SizeInt): SizeInt;
   StartIndex: SizeInt): SizeInt;
@@ -5654,6 +5688,10 @@ begin
   Result:=IndexOfAny(AnyOf,StartIndex,Length);
   Result:=IndexOfAny(AnyOf,StartIndex,Length);
 end;
 end;
 
 
+function TStringHelper.IndexOfAny(const AnyOf: String; StartIndex: SizeInt; ACount: SizeInt): SizeInt;
+begin
+  Result:=IndexOfAny(AnyOf.ToCharArray,StartIndex,aCount);
+end;
 
 
 function TStringHelper.IndexOfAny(const AnyOf: array of Char;
 function TStringHelper.IndexOfAny(const AnyOf: array of Char;
   StartIndex: SizeInt; ACount: SizeInt): SizeInt;
   StartIndex: SizeInt; ACount: SizeInt): SizeInt;
@@ -5996,11 +6034,23 @@ begin
 end;
 end;
 
 
 
 
+
+function TStringHelper.Split(const Separators: String): TStringArray;
+begin
+  Result:=Split(Separators.ToCharArray);
+end;
+
+
 function TStringHelper.Split(const Separators: array of Char): TStringArray;
 function TStringHelper.Split(const Separators: array of Char): TStringArray;
 begin
 begin
   Result:=Split(Separators,#0,#0,Length+1,TStringSplitOptions.None);
   Result:=Split(Separators,#0,#0,Length+1,TStringSplitOptions.None);
 end;
 end;
 
 
+function TStringHelper.Split(const Separators: string; ACount: SizeInt): TStringArray;
+begin
+  Result:=Split(Separators.ToCharArray,aCount);
+end;
+
 
 
 function TStringHelper.Split(const Separators: array of Char; ACount: SizeInt
 function TStringHelper.Split(const Separators: array of Char; ACount: SizeInt
   ): TStringArray;
   ): TStringArray;
@@ -6008,6 +6058,11 @@ begin
   Result:=Split(Separators,#0,#0,ACount,TStringSplitOptions.None);
   Result:=Split(Separators,#0,#0,ACount,TStringSplitOptions.None);
 end;
 end;
 
 
+function TStringHelper.Split(const Separators: string; Options: TStringSplitOptions): TStringArray;
+begin
+  Result:=Split(Separators.ToCharArray,Options);
+end;
+
 
 
 function TStringHelper.Split(const Separators: array of Char;
 function TStringHelper.Split(const Separators: array of Char;
   Options: TStringSplitOptions): TStringArray;
   Options: TStringSplitOptions): TStringArray;
@@ -6015,6 +6070,11 @@ begin
   Result:=Split(Separators,Length+1,Options);
   Result:=Split(Separators,Length+1,Options);
 end;
 end;
 
 
+function TStringHelper.Split(const Separators: string; ACount: SizeInt; Options: TStringSplitOptions): TStringArray;
+begin
+  Result:=Split(Separators.ToCharArray,aCount,Options);
+end;
+
 
 
 function TStringHelper.Split(const Separators: array of Char; ACount: SizeInt;
 function TStringHelper.Split(const Separators: array of Char; ACount: SizeInt;
   Options: TStringSplitOptions): TStringArray;
   Options: TStringSplitOptions): TStringArray;
@@ -6049,6 +6109,11 @@ begin
   Result:=Split(Separators,#0,#0,ACount,Options);
   Result:=Split(Separators,#0,#0,ACount,Options);
 end;
 end;
 
 
+function TStringHelper.Split(const Separators: String; AQuote: Char): TStringArray;
+begin
+  Result:=Split(Separators.ToCharArray,aQuote);
+end;
+
 
 
 function TStringHelper.Split(const Separators: array of Char; AQuote: Char
 function TStringHelper.Split(const Separators: array of Char; AQuote: Char
   ): TStringArray;
   ): TStringArray;
@@ -6056,6 +6121,11 @@ begin
   Result:=Split(Separators,AQuote,AQuote);
   Result:=Split(Separators,AQuote,AQuote);
 end;
 end;
 
 
+function TStringHelper.Split(const Separators: String; AQuoteStart, AQuoteEnd: Char): TStringArray;
+begin
+  Result:=Split(Separators.ToCharArray,aQuoteStart,aQuoteEnd);
+end;
+
 
 
 function TStringHelper.Split(const Separators: array of Char; AQuoteStart,
 function TStringHelper.Split(const Separators: array of Char; AQuoteStart,
   AQuoteEnd: Char): TStringArray;
   AQuoteEnd: Char): TStringArray;
@@ -6063,6 +6133,11 @@ begin
   Result:=Split(Separators,AQuoteStart,AQuoteEnd,TStringSplitOptions.None);
   Result:=Split(Separators,AQuoteStart,AQuoteEnd,TStringSplitOptions.None);
 end;
 end;
 
 
+function TStringHelper.Split(const Separators: string; AQuoteStart, AQuoteEnd: Char; Options: TStringSplitOptions): TStringArray;
+begin
+  Result:=Split(Separators.ToCharArray,aQuoteStart,aQuoteEnd,Options);
+end;
+
 
 
 function TStringHelper.Split(const Separators: array of Char; AQuoteStart,
 function TStringHelper.Split(const Separators: array of Char; AQuoteStart,
   AQuoteEnd: Char; Options: TStringSplitOptions): TStringArray;
   AQuoteEnd: Char; Options: TStringSplitOptions): TStringArray;
@@ -6070,6 +6145,11 @@ begin
   Result:=Split(Separators,AQuoteStart,AQuoteEnd,Length+1,Options);
   Result:=Split(Separators,AQuoteStart,AQuoteEnd,Length+1,Options);
 end;
 end;
 
 
+function TStringHelper.Split(const Separators: string; AQuoteStart, AQuoteEnd: Char; ACount: SizeInt): TStringArray;
+begin
+  Result:=Split(Separators.ToCharArray,aQuoteStart,aQuoteEnd,aCount);
+end;
+
 
 
 function TStringHelper.Split(const Separators: array of Char; AQuoteStart,
 function TStringHelper.Split(const Separators: array of Char; AQuoteStart,
   AQuoteEnd: Char; ACount: SizeInt): TStringArray;
   AQuoteEnd: Char; ACount: SizeInt): TStringArray;
@@ -6077,6 +6157,12 @@ begin
   Result:=Split(Separators,AQuoteStart,AQuoteEnd,ACount,TStringSplitOptions.None);
   Result:=Split(Separators,AQuoteStart,AQuoteEnd,ACount,TStringSplitOptions.None);
 end;
 end;
 
 
+function TStringHelper.Split(const Separators: string; AQuoteStart, AQuoteEnd: Char; ACount: SizeInt; Options: TStringSplitOptions
+  ): TStringArray;
+begin
+  Result:=Split(Separators.ToCharArray,aQuoteStart,aQuoteEnd,aCount,Options);
+end;
+
 
 
 function TStringHelper.Split(const Separators: array of Char; AQuoteStart,
 function TStringHelper.Split(const Separators: array of Char; AQuoteStart,
   AQuoteEnd: Char; ACount: SizeInt; Options: TStringSplitOptions): TStringArray;
   AQuoteEnd: Char; ACount: SizeInt; Options: TStringSplitOptions): TStringArray;
@@ -6110,7 +6196,7 @@ Var
 
 
 begin
 begin
 
 
- // S:=Self;
+  S:=Self;
   SetLength(Result,BlockSize);
   SetLength(Result,BlockSize);
   Len:=0;
   Len:=0;
   LastSep:=0;
   LastSep:=0;
@@ -6189,8 +6275,8 @@ Var
     else
     else
       // MVC todo:
       // MVC todo:
       Result:=-1; // S.IndexOfAny(Separators,StartIndex,Length,Match);
       Result:=-1; // S.IndexOfAny(Separators,StartIndex,Length,Match);
-
   end;
   end;
+
   Procedure MaybeGrow(Curlen : SizeInt);
   Procedure MaybeGrow(Curlen : SizeInt);
 
 
   begin
   begin
@@ -6203,7 +6289,6 @@ Var
   T : String;
   T : String;
 
 
 begin
 begin
-
   S:=Self;
   S:=Self;
   SetLength(Result,BlockSize);
   SetLength(Result,BlockSize);
   Len:=0;
   Len:=0;
@@ -6289,7 +6374,7 @@ begin
 end;
 end;
 
 
 
 
-function TStringHelper.ToNativeint: Nativeint;
+function TStringHelper.ToNativeInt: NativeInt;
 begin
 begin
   Result:=StrToNativeInt(Self);
   Result:=StrToNativeInt(Self);
 end;
 end;