| Rapid-Q Documentation by William Yu (c)1999, appended by John Kelly | Appendix A: QMEMORYSTREAM |
|
|
|
| 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. | ||||
| Method | Type | Description | Params | Support |
|
|
|
|
|
|
| Close | SUB | Close the stream Comment: If you close the memorystream, you reset the whole stream. No need to open it again (there isn't even an open method for qmemorystream), just write to the memorystream again. Alain 22 Aug 2002 |
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:
|
||||
| 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):
|
||||
| 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 (Num_Type) AS DOUBLE | Num_Type can be CONST Num_BYTE = 1 CONST Num_SHORT = 2 CONST Num_WORD = 3 CONST Num_LONG = 4 CONST Num_DWORD = 5 CONST Num_SINGLE = 6 CONST Num_DOUBLE = 8 |
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 |
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)
To correctly deallocate memory from QMEMORYSTREAM you should
set Position and Size to 0 and then set one value. To see how
this works, run Task Manager to follow memory in process.
Then run this code:
DIM Mem AS QMemoryStream
Showmessage "Pre memory"
Mem.Size = 3200005
S$ = Space$(3200000)
Mem.WriteStr(S$, LEN(S$))
Showmessage "Memory allocated"
'now deallocate
Mem.Position = 0
Mem.Size = 0
Showmessage "Memory should be all deallocated"
'loading a value finally resets memory
S$ = "hi"
Mem.WriteStr(S$, LEN(S$))
Showmessage "Finally deallocated by assigning value"
Mem.Close
Application.Terminate
| Prev Component | Contents | Next Component |