mormot2 TRawByteStringStream

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;

  

posted @ 2020-11-29 11:31  delphi中间件  阅读(385)  评论(0编辑  收藏  举报