[fpc-pascal] destructor TDecompressionStream.Destroy question
Michael Van Canneyt
michael at freepascal.org
Fri Sep 21 08:55:39 CEST 2007
On Thu, 20 Sep 2007, David Mears wrote:
> from fpc/packages/fcl-base/src/inc/zstream.pp
> I'm not really sure why this is in the destructor for tdecompressionstream.
> if FZRec.avail_in <> 0 then
> Source.Seek(-FZRec.avail_in, soFromCurrent);
To reposition the source stream on the last actually read data.
> my tdecompressionstream is fed by a tideadecryptstream - when
> tdecompressionstream is freed it causes that seek in the decrypt for
> some reason? , which isn't supported by the tdecryptionstream and it
> throws a EIDEAError - or is there a problem with the source stream?
No, this is "normal".
> generally I feel that exceptions are somehow uncivilized, so avoiding
> one so totally unnecessary (in context, at least) would be appreciated.
I'll introduce a property in TDecompressionstream: 'SourceSeekable' or so
which can be used to control the behaviour.
Another solution is to implement a long-standing idea of mine:
to introduce a property in TStream:
StreamCapabilities : TStreamCapabilities;
TStreamCapability = (scSeekForward,scSeekBackward,scRead,scWrite,scSize);
TStreamCapabilities = set of TStreamCapability;
I think I'll go for the latter one.
More information about the fpc-pascal