[fpc-pascal] TMemoryStream.SetSize question.
gabor
gabor at poczta.onet.pl
Mon Jun 14 21:56:25 CEST 2021
W dniu 2021-06-14 o 21:27, Michael Van Canneyt via fpc-pascal pisze:
>
>
> On Mon, 14 Jun 2021, gabor via fpc-pascal wrote:
>
>> Why does TMemoryStream only implement one version of SetSize method?
>>
>> https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/objpas/classes/classesh.inc?revision=49038&view=markup#l1225
>>
>>
>> The TStream class has two versions of SetSize method (virtual,
>> overload) - one with a parameter of LongInt type and the other with
>> the Int64 type. Since function is virtual, child classes can override
>> it and can be called from code, but then a version of the SetSize
>> function not implemented for a given platform in the TMemoryStream
>> class can be called.
>
> The base method checks which one is overridden. So it does not matter
> which one you override in the child.
> The "other" one will always fall back to the method in TStream.
>
Unfortunately, on the 64bit platform it does not fully work. See the
project below.
program Project1;
{$mode objfpc}
uses
Classes;
type
TMyMemStream = class(TMemoryStream)
procedure Foo;
procedure Bar;
end;
procedure TMyMemStream.Foo;
begin
SetSize(10);
end;
procedure TMyMemStream.Bar;
begin
SetSize(Int64(10));
end;
var
MS: TMyMemStream;
begin
MS := TMyMemStream.Create;
MS.Foo;
WriteLn(MS.Size);
MS.Bar;
WriteLn(MS.Size);
MS.Free;
ReadLn;
end.
Michał.
More information about the fpc-pascal
mailing list