si mi ricordo, solo che sono su arm! e proprio non riesco a digerire il suo set di istruzioni assembly, in più dovrà essere portabile e dunque mi troverei a scrivere un bel po di codice solo per scrollare il bitarray(e io non mi chiamo Master Assembly Wizard), cosa comunque possibile anche usando il c puro anche se con qualche calo prestazionale.
Ma usando un bitarray di 1024 bit e arrivando a id 1025 come mi comporto?
l'idea mi piace parecchio, la modificherei cosi:
offset primo id libero
bitarray 2048 bit
usando anche un offset di base il range si ingrandirebbe, causando però una qualche sorta di probabilità di perdere qualche id in qua e la, potrei sempre tenere quell'assurdo codice e trasformarlo in una sottospecie di garbage collector in modo che in determinate circostanze(tipo quando il bitarray=0 o quando cambia l'offset) lo sistemi.
in questo modo è come se scrollassi il bitarray in una regione più grossa, cosi potrebbe andare anche perché si riduce drasticamente l'oneroso richiamo al "nuovo id garbage collector".
altresì potrei creare solo un bitarray da 10240bit ma cosi forse diventa lo stesso abnorme.
per contare i bit potrei usare una semplicissima
Codice: Seleziona tutto
int i;
unsigned int k;
for ( i = 0, k = 0; i < bytearray, ++i)
{
int b;
for ( b = 0; ( b < 8 ); ++b,++k)
if ( !(bitarray[i] >> b) & 0x1) goto FINDIT;
}
FINDIT:
return k;
o qualcosa di simile magari scritto meglio al PC più che sullo smartphone.