[fpc-devel] Re: TBits problem

Tomas Hajny XHajT03 at hajny.biz
Wed Nov 6 18:41:17 CET 2013


On Wed, November 6, 2013 08:45, Andrea Mauri wrote:
> any hint?
> should I have to open a bug report?

Yes, I think so (although I have no clue regarding compatibility with
Delphi, etc.) - looking at the implementation of OrBits (and also
XorBits), the calculation which bits should be used is different from
AndBits (and probably wrong - it checks if the size allocated for the
current object is sufficient for covering the bits in argument, but it
does not care about the initialized size of the argument - as long as the
allocated size is sufficient, it does not crash, but it gives wrong
results).

Tomas


>
> Il 31/10/2013 16:23, Andrea Mauri ha scritto:
>> Dear All,
>> I am using TBits object but I found some errors using it. Before adding
>> a bugreport to the bugtracker I would be sure that there is nothing that
>> I am doing wrong.
>> Below a small procedure that highlights the wrong behaviour of TBits
>> object.
>>
>> var
>>    i, bsize1, bsize2: integer;
>>    b1, b2, b3: TBits;
>>    s1, s2, s3: string;
>> begin
>>    bsize1:= 16;
>>    bsize2:= 164;
>>    b1:= TBits.Create;
>>    b2:= TBits.Create(bsize2);
>>    b3:= TBits.Create;
>>    for i:= 0 to bsize1 - 1 do
>>      b1[i]:= True;
>>
>>    b2.OrBits(b1);
>>    b3.OrBits(b1);
>>    for i:= b1.Size to bsize2 - 1 do
>>      b3[i]:= False;
>>    if not b2.Equals(b3) then
>>    begin
>>      s1:= bitstostring(b1);
>>      s2:= bitstostring(b2);
>>      s3:= bitstostring(b3);
>>    end;
>>    b1.Free;
>>    b2.Free;
>>    b3.Free;
>>
>> where bitstostring is a simple function as below:
>>
>> function bitstostring(b:TBits): string;
>> var
>>    i: integer;
>>    bs: string;
>> begin
>>    bs:= '';
>>    for i:= 0 to b.Size - 1 do
>>      if b[i] then
>>        bs:= bs + '1'
>>      else
>>        bs:= bs + '0';
>>    Result:= bs;
>> end;
>>
>> What I got is that b2 has set to 1 not only the bits that are 1 in b1
>> but also some other bits. b2 and b3 should be the same but they are not.
>>
>> I tested it on Win32 using lazarus:
>> Lazarus 1.0.13 r42910M FPC 2.6.2 i386-win32-win32/win64
>>
>> Could you please let me know if you can reproduce it or if I am doing
>> something wrong?
>>
>> Best regards,
>> Andrea Mauri





More information about the fpc-devel mailing list