Rapid-Q Documentation by William Yu (c)1999 | Appendix A: QMEMORYSTREAM

# QMEMORYSTREAM Component

  QMemorystream is used to store temporary data to memory for manipulation.
  QMemorystream Properties

  Field | Type | R/W | Default | Support

  LineCount | INTEGER | R |  | W
  | LineCount determines how many lines there are in the memorystream. Note that LineCount ignores the CR character, and will only detect LF, so it treats CRLF as one line, but LFLF as 2 lines.
  Pointer | INTEGER | R |  | WXG
  | Pointer specifies the memory address of the memorystream.
  Position | INTEGER | RW |  | WXG
  | Position specifies the current position of the memory pointer, any read/write operations will begin from here.
  Size | INTEGER | RW |  | WXG
  | Size determines the number of bytes allocated to the memorystream.

  QMemorystream Methods

  Method | Type | Description | Params | Support

  Close | SUB | Close the stream | 0 | WXG
  CopyFrom | SUB (Stream, Bytes%) | Copy from another stream Either QFileStream or QMemoryStream | 2 | WXG
  | Use CopyFrom to copy a QFILESTREAM or a QMEMORYSTREAM to the current memorystream. Details: If Bytes% = 0 then the Stream is reset to position 0 and the whole stream is then copied. Example:

  > $INCLUDE "RAPIDQ.INC"
  > DIM File1 AS QFILESTREAM
  > DIM Mem AS QMEMORYSTREAM
  > File1.Open("test.txt", fmOpenRead)
  > Mem.CopyFrom(File1, 123) '-- Copy 123 bytes from File1

  ExtractRes | SUB (Resource AS LONG) | Extract resource to memorystream | 1 | WXG
  | Extracts a resource from your program to the memorystream. Details: The parameter Resource is not the resource handle, but the absolute position of the resource within your file. This requires that you use the keyword Resource(n) to specify the resource number.
  Example (dumping all resources):

  > $INCLUDE "RAPIDQ.INC"
  > $RESOURCE res_1 as "res.1"
  > $RESOURCE res_2 as "res.2"
  > DIM Mem AS QMEMORYSTREAM
  > FOR I = 0 TO ResourceCount-1
  > Mem.ExtractRes(Resource(I))
  > NEXT

  LoadArray | SUB (Array(), NumElements&) | Load data into array | 2 | WXG
  MemCopyFrom | SUB (Address&, Bytes&) | Copies contents of Address& to memorystream | 2 | WXG
  MemCopyTo | SUB (Address&, Bytes&) | Copies contents to Address& | 2 | WXG
  Read | SUB (variable) | Generic Read, determines the storage space and saves data in variable | 1 | WXG
  ReadLine | FUNCTION () AS STRING | Reads an entire line | 0 | W
  ReadNum | FUNCTION (n) AS DOUBLE | Read n bytes, returns number | 1 | WXG
  ReadStr | FUNCTION (n) AS STRING | Read n bytes, returns the string | 1 | WXG
  ReadBinStr | FUNCTION (n) AS STRING | Read n bytes, returns the binary string | 1 | W
  ReadUDT | SUB (MyType) | Read and store data in a MyType structure | 1 | WXG
  SaveArray | SUB (Array(), NumElements&) | Save array | 2 | WXG
  Seek | SUB (Position%, From%) | Seek to Position%, From% see RAPIDQ.INC | 2 | WXG
  Write | SUB (variable) | Generic Write, determines the storage space and saves data to memory | 1 | WXG
  WriteLine | SUB (S AS STRING) | Writes string with CR+LF | 1 | W
  WriteNum | SUB (number, bytes%) | Writes a number to memory | 2 | WXG
  WriteBinStr | SUB (string, bytes%) | Writes a binary string to file (slow) | 2 | W
  WriteStr | SUB (string, bytes%) | Writes string to memory | 2 | WXG
  WriteUDT | SUB (MyType) | Write data stored in a MyType structure | 1 | WXG

  QMemoryStream Examples

        DIM Mem AS QMemoryStream

        S$ = "Hello world!"
        Mem.WriteStr(S$, LEN(S$))
        Mem.Position = 0
        S$ = Mem.ReadStr(LEN(S$))
        PRINT S$                            '' print it
        Mem.Close

      '------------------------------------------------------

        DIM Mem AS QMemoryStream
        DIM I AS INTEGER

        I = 12
        Mem.Write(I)
        S$ = "Hello world!"
        Mem.Write(S$)
        Mem.Position = 0
        Mem.Read(I)
        S$ = SPACE$(I)
        Mem.Read(S$)
        PRINT S$                            '' print it
        Mem.Close

      '------------------------------------------------------

        TYPE MyType
            Name AS STRING*30
            Phone AS STRING*8
            Age AS INTEGER
        END TYPE

        DIM Person AS MyType
            Person.Name = "Joe"
            Person.Phone = "555-5555"

        DIM Mem AS QMemoryStream
            Mem.WriteUDT(Person)

  Prev Component | Contents | Next Component