| [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  |