mormot2 TRawByteStringStream

mormot.core.base.pas

  /// TStream using a RawByteString as internal storage
  // - default TStringStream uses WideChars since Delphi 2009, so it is
  // not compatible with previous versions, and it does make sense to
  // work with RawByteString/RawUTF8 in our UTF-8 oriented framework
  // - just like TStringStream, is designed for appending data, not modifying
  // in-place, as requested e.g. by TTextWriter or TBufferWriter classes
  TRawByteStringStream = class(TStream)
  protected
    fPosition: integer;
    fDataString: RawByteString;
    {$ifdef FPC}
    function GetPosition: Int64; override;
    {$endif FPC}
    function  GetSize: Int64; override;
    procedure SetSize(NewSize: Longint); override;
  public
    /// initialize a void storage
    constructor Create; overload;
    /// initialize the storage, optionally with some RawByteString content
    constructor Create(const aString: RawByteString); overload;
    /// read some bytes from the internal storage
    // - returns the number of bytes filled into Buffer (<=Count)
    function Read(var Buffer; Count: Longint): Longint; override;
    /// change the current Read/Write position, within current stored range
    function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
    /// change the current Read/Write position, within current stored range
    function Seek(Offset: Longint; Origin: Word): Longint; override;
    /// append some data to the buffer
    // - will resize the buffer, i.e. will replace the end of the string from
    // the current position with the supplied data
    function Write(const Buffer; Count: Longint): Longint; override;
    /// retrieve the stored content from a given position, as UTF-8 text
    procedure GetAsText(StartPos, Len: PtrInt; var Text: RawUTF8);
    /// direct low-level access to the internal RawByteString storage
    property DataString: RawByteString
      read fDataString write fDataString;
  end;

  

相关文章:

  • 2022-03-05
  • 2022-03-09
猜你喜欢
  • 2022-01-12
  • 2021-09-22
  • 2021-08-28
  • 2021-10-17
  • 2021-12-07
  • 2021-10-16
  • 2021-12-02
相关资源
相似解决方案