summaryrefslogtreecommitdiff
path: root/rtl/objpas/sysutils/syssbh.inc
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/objpas/sysutils/syssbh.inc')
-rw-r--r--rtl/objpas/sysutils/syssbh.inc112
1 files changed, 112 insertions, 0 deletions
diff --git a/rtl/objpas/sysutils/syssbh.inc b/rtl/objpas/sysutils/syssbh.inc
new file mode 100644
index 0000000000..9c9102a838
--- /dev/null
+++ b/rtl/objpas/sysutils/syssbh.inc
@@ -0,0 +1,112 @@
+
+ { TStringBuilder }
+
+ TStringBuilder = class
+ private
+ const
+ DefaultCapacity = 64;
+ private
+ Function GetCapacity: Integer;
+ Procedure SetCapacity(AValue: Integer);
+ Function GetC(Index: Integer): SBChar;
+ Procedure SetC(Index: Integer; AValue: SBChar);
+ Function GetLength: Integer; inline;
+ Procedure SetLength(AValue: Integer);
+ protected
+ FData: TSBCharArray;
+ FLength: Integer;
+ FMaxCapacity: Integer;
+ // Raise error on range check.
+ Procedure CheckRange(Idx,Count,MaxLen : Integer);inline;
+ Procedure CheckNegative(Const AValue : Integer; Const AName: SBString); inline;
+ // All appends/inserts pass through here.
+
+ Procedure DoAppend(Const S : {$IFDEF SBUNICODE}SBString{$ELSE}RawByteString{$ENDIF});virtual;
+ Procedure DoAppend(const AValue: TSBCharArray; Idx, aCount: Integer); virtual;
+ Procedure DoInsert(Index: Integer; const AValue: SBString); virtual;
+ Procedure DoInsert(Index: Integer; const AValue: TSBCharArray; StartIndex, SBCharCount: Integer); virtual;
+ Procedure DoReplace(Index: Integer; const Old, New: SBString); virtual;
+ Procedure Grow;
+ Procedure Shrink;
+ public
+ Constructor Create;
+ Constructor Create(aCapacity: Integer);
+ Constructor Create(const AValue: SBString);
+ Constructor Create(aCapacity: Integer; aMaxCapacity: Integer);
+ Constructor Create(const AValue: SBString; aCapacity: Integer);
+ Constructor Create(const AValue: SBString; StartIndex: Integer; aLength: Integer; aCapacity: Integer);
+
+ Function Append(const AValue: Boolean): TStringBuilder;
+ Function Append(const AValue: Byte): TStringBuilder;
+ Function Append(const AValue: SBChar): TStringBuilder;
+ Function Append(const AValue: Currency): TStringBuilder;
+ Function Append(const AValue: Double): TStringBuilder;
+ Function Append(const AValue: Smallint): TStringBuilder;
+ Function Append(const AValue: LongInt): TStringBuilder;
+ Function Append(const AValue: Int64): TStringBuilder;
+ Function Append(const AValue: TObject): TStringBuilder;
+ Function Append(const AValue: Shortint): TStringBuilder;
+ Function Append(const AValue: Single): TStringBuilder;
+ Function Append(const AValue: UInt64): TStringBuilder;
+ Function Append(const AValue: TSBCharArray): TStringBuilder;
+ Function Append(const AValue: Word): TStringBuilder;
+ Function Append(const AValue: Cardinal): TStringBuilder;
+ Function Append(const AValue: PSBChar): TStringBuilder;
+{$IFDEF SBUNICODE}
+ // Do not use SBRawstring, we need 2 versions in case of unicode
+ Function Append(const AValue: SBString): TStringBuilder;
+{$ENDIF}
+ Function Append(const AValue: RawByteString): TStringBuilder;
+ Function Append(const AValue: SBChar; RepeatCount: Integer): TStringBuilder;
+ Function Append(const AValue: TSBCharArray; StartIndex: Integer; SBCharCount: Integer): TStringBuilder;
+ Function Append(const AValue: SBString; StartIndex: Integer; Count: Integer): TStringBuilder;
+
+ Function Append(const Fmt: SBString; const Args: array of const): TStringBuilder;
+ Function AppendFormat(const Fmt: SBString; const Args: array of const): TStringBuilder;
+ Function AppendLine: TStringBuilder;
+ Function AppendLine(const AValue: RawByteString): TStringBuilder;
+
+ Procedure Clear;
+ Procedure CopyTo(SourceIndex: Integer; Var Destination: TSBCharArray; DestinationIndex: Integer; Count: Integer);
+ Function EnsureCapacity(aCapacity: Integer): Integer;
+ Function Equals(StringBuilder: TStringBuilder): Boolean; reintroduce;
+
+ Function Insert(Index: Integer; const AValue: Boolean): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: Byte): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: SBChar): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: Currency): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: Double): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: Smallint): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: LongInt): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: TSBCharArray): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: Int64): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: TObject): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: Shortint): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: Single): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: SBString): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: Word): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: Cardinal): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: UInt64): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: SBString; const aRepeatCount: Integer): TStringBuilder;
+ Function Insert(Index: Integer; const AValue: TSBCharArray; startIndex: Integer; SBCharCount: Integer): TStringBuilder;
+
+ Function Remove(StartIndex: Integer; RemLength: Integer): TStringBuilder;
+
+ Function Replace(const OldChar, NewChar: SBChar): TStringBuilder;
+ Function Replace(const OldChar, NewChar: SBChar; StartIndex: Integer; Count: Integer): TStringBuilder;
+ Function Replace(const OldValue, NewValue: SBRawString): TStringBuilder;
+ Function Replace(const OldValue, NewValue: SBRawString; StartIndex: Integer; Count: Integer): TStringBuilder;
+{$IFDEF SBUNICODE}
+ Function ToString: SBString;
+{$ELSE}
+ Function ToString: SBString; override;
+{$ENDIF}
+ Function ToString(aStartIndex: Integer; aLength: Integer): SBString; reintroduce;
+
+ property Chars[index: Integer]: SBChar read GetC write SetC; default;
+ property Length: Integer read GetLength write SetLength;
+ property Capacity: Integer read GetCapacity write SetCapacity;
+ property MaxCapacity: Integer read FMaxCapacity;
+ end;
+
+