diff options
Diffstat (limited to 'rtl/objpas/sysutils/syssbh.inc')
-rw-r--r-- | rtl/objpas/sysutils/syssbh.inc | 112 |
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; + + |