Buongiorno a tutti,
qualcuno di voi ha avuto esperienze nell'uso della classe in oggetto?
Ne sto testando i metodi per l'utilizzo in una mia classe e genera un runtime error che mi sembra
assolutamente impossibile.
Nello specifico ho un errore utilizzando la FindFirst e la FindNext per scorrere i valori alla ricerca dei bit impostati a True.
Dalla documentazione il comportamento corretto che ci si aspetta è che la chiamata a FindNext ritorni con -1 quando non trova più valori ( fine array).
Il codice elementare che uso
procedure TForm1.FormCreate(Sender: TObject);
begin
b := TBits.Create(10);
m1.Append('b := TBits.Create(10)');
m1.Append('');
m1.append('bitState.Clearall');
b.Clearall;
m1.Append('');
m1.append('bitState.Get(0) : ' + BoolToStr(b.Get(0),True));
m1.Append('');
b.SetOn(0);
m1.append('bitState.SetOn(0)');
m1.Append('');
m1.append('bitState.Get(0) : ' + BoolToStr(b.Get(0),True));
m1.Append('');
m1.append('bitState.Clearall');
b.Clearall;
m1.Append('');
m1.append('FindFirstBit(True) : '+ IntToStr(b.FindFirstBit(True)));
m1.Append('');
b.SetOn(6);
m1.append('bitState.SetOn(6)');
m1.Append('');
b.SetOn(8);
m1.append('bitState.SetOn(8)');
m1.Append('');
b.SetOn(10);
m1.append('bitState.SetOn(10)');
m1.Append('');
m1.append('bitState.FindFirstBit(True) : ' + IntToStr(b.FindFirstBit(True)));
m1.Append('');
m1.append('bitState.FindNextBit : ' + IntToStr(b.FindNextBit));
m1.Append('');
m1.append('bitState.FindNextBit : ' + IntToStr(b.FindNextBit));
m1.Append('');
m1.append('bitState.FindNextBit : ' + IntToStr(b.FindNextBit));
m1.Append('');
L'ultima chiamata a FindNextBit provoca il messagio di errore
Invalid bit index : 11
Dal testo sembra ovviamente che la ricerca sia andata oltre la fine.
E questo mi sembra inverosimile.
Evidentemente sbaglio qualcosa ma non riesco a vederlo.
Vi ringrazio per l'attenzione.