[Overview][Types][Classes][Index] |
[Properties (by Name)] [Methods (by Name)] [Events (by Name)]
Stream class that provides copy-on-write functionality
Source position: resdatastream.pp line 61
type TResourceDataStream = class(TStream) |
||
protected |
||
function GetPosition; override; |
||
procedure SetPosition(); override; |
||
function GetSize; override; |
||
procedure SetSize64(); override; |
||
public |
||
constructor Create(); |
|
Creates a new object |
destructor Destroy; override; |
||
function Compare(); |
|
Compares the stream to another one |
procedure SetCustomStream(); |
|
Sets a custom stream as the underlying stream |
function Read(); override; |
||
function Write(); override; |
||
function Seek(); override; |
||
property Cached: Boolean; [rw] |
|
Controls the copy-on-write behaviour of the stream |
end; |
|
Stream class that provides copy-on-write functionality |
|
| | ||
| | ||
This class provides the copy-on-write mechanism of TAbstractResource.RawData, via more levels of indirection.
It uses an underlying stream, to which it redirects operations.
The underlying stream can be a TCachedDataStream descendant, a memory stream or a custom stream. Usually when a resource is loaded from a stream, the underlying stream is a TCachedDataStream descendant, which provides a read-only stream-like interface over a portion of the original stream (that is, the part of the original stream where resource data resides). When TResourceDataStream is requested to write data, it replaces the underlying stream with a memory stream, whose contents are copied from the previous underlying stream: this way, copy-on-write functionality can be achieved.
As said before, third possibility is to have a custom stream as the underlying stream: a user can set this stream via TAbstractResource.SetCustomRawDataStream method, which in turn calls TResourceDataStream.SetCustomStream
Figure: Levels of indirection
. TResourceDataStream | _______________________|_______________________________ | | | TMemoryStream TCachedDataStream descendant custom stream / \ _______________________|_____________|______________________________ | o r i g|i n a l s t|r e a m | |_______________________|_____________|______________________________|
|
Base cached stream class |
|
|
Creates a new object |
|
|
Sets a custom stream as the underlying stream |