AFAIK a.NotBits(b) means (a and not b):

a b result
0 0 0
0 1 0
1 0 1
1 1 0

Mattias

Thank you Mattias.
It works as you described.
Anyway, since ClearAll, AndBits, OrBits etc works iterating on
FBits : ^TBitArray;
they are much faster then the simple iteration along property
property Bits[Bit: longint]: Boolean read get write SetBit; default;

I think should be useful to have also at least two other methods directly implemented in tbits: 1. the opposite of ClearAll, something like SetAll that sets all bits to 1, I think this s a typical operation on Bits;


procedure TBits.Setall;
var
   loop : longint;
begin
   for loop := 0 to FSize - 1 do
      FBits^[loop] := 1;
end;


2. a Not operator, something like a.NotBits; with no arguments that perform the not operation on the TBIts instance (a[i]:= not a[i]) or something that performs a not operation on the passed TBits, i.e. a.Not(b) that fills a in this way: a[i]:= not b[i];

procedure TBits.Notbits;
var
   n : longint;
   jj : cardinal;
   loop : longint;
begin
   for loop := 0 to FSize - 1 do
      FBits^[loop] := not FBits^[loop];
end;

or

procedure TBits.Not(bitset : TBits);
var
   n : longint;
   loop : longint;
begin
   if FSize < bitset.getFSize then
      n := FSize - 1
   else
      n := bitset.getFSize - 1;

   for loop := 0 to n do
      FBits^[loop] := not bitset.FBits^[loop];
end;

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to