Pigaz.BitStream
Questa libreria è nata dalla mia necessità di poter leggere e scrivere singoli bit da uno stream in maniera semplice ed intuitiva. Fino a poco tempo fa ogni volta che volevo studiare qualche nuovo algoritmo di compressione o giocare un po' con un codec multimediale dovevo sempre riscrivermi quelle due o tre funzioni che mi servivano. Non ricordandomi a memoria L'Implementazione delle funzioni queste venivano sempre diverse e i bug che spuntavano regolarmente mi distoglievano dal mio studio rallentandomi il passo. Così ecco che, dopo l'ennesima serata passata a cercare di capire l'errore che si annidava nella funzione WriteBit, ho deciso di crearmi una libreria.
La libreria è composta da due sole classi, BitStreamReader e BitStreamWriter. Sia il writer che il reader hanno al loro interno un buffer che usano per minimizzare gli accessi al disco e velocizzare tutte le operazioni. Oltre ai normali stream su supporti fisici potete usare anche dei MemoryStream e quindi scrivere su dei blocchi di memoria.
Tutto il codice è stato scritto Test First quindi tutte le funzionalità sono state testate attentamente. Di documentazione in formato HTML per ora non ve ne è ma conto di scriverla in futuro per aiutare anche chi non ha voglia di leggere il codice. Per ora potete usare il codice dei test che descrivono in maniera concisa il comportamento delle due classi.
In questo momento i test vengono compilati nel binario solo se si sta eseguendo una build in modalità di debug. Se volete cambiare questo comportamento dovete commentare le direttive del preprocessore all'inizio dei file che contengono il codice sorgente dei test.
L'unico problema di cui sono a conoscenza per ora riguarda la scrittura su dei MemoryStream. Quando si raggiunge la fine di questi stream la write non è in grado di aumentare le dimensioni del blocco di memoria quindi tutte le informazioni in più andranno perse.
In futuro proverò anche ad aggiungere la scrittura e la lettura di tipi di dato come float e double che per ora non so come implementare senza utilizzare i puntatori.
Sorgenti
Questo file compresso contiene il codice sorgente dello script.
Pigaz.BitStream.7z 8b70ac9e9c4c3f1381fae429db2ec21d88aac3cc
Repository
La pagina del progetto su Google Code è http://code.google.com/p/pigaz-bitstream/.
Per scaricare l'ultima versione dal repository subversion usate il comando:
svn checkout http://pigaz-bitstream.googlecode.com/svn/trunk/ pigaz-bitstream