Ho scritto una libreria di operazioni bitwise .NET come parte dei miei progetti (roba che va da get MSB set
a trasformazioni bit a bit più complicate) e intendo rilasciarla come software libero. Tuttavia, sono un po 'confuso riguardo all'aspetto progettuale della biblioteca.
Molti dei metodi / trasformazioni nella libreria vengono forniti con endianness diversi. Un semplice esempio è un metodo getBitAt
che considera l'indice 0
come il bit meno significativo o il bit più significativo, a seconda della versione utilizzata.
In pratica, ho scoperto che l'utilizzo di funzioni separate per endianness differenti comporta un codice molto più comprensibile e riusabile rispetto all'assunzione che tutte le operazioni siano little-endian
o qualcosa del genere.
Sono davvero imbarazzato per quanto riguarda il modo migliore per impacchettare la libreria.
- Devo avere metodi con versioni LE e BE che richiedono un enum
parametro nella loro firma, ad es.
Endianness.Little, Endianness.Big
? - Devo avere classi statiche diverse con
metodi con nomi identici? come
MSB.GetBit
eLSB.GetBit
Su una nota molto più ampia, c'è uno standard che potrei usare in casi come questo? Qualche guida? Il mio problema di progettazione è banale? Ho un perfezionista piegato, e a volte mi blocco su problemi di progettazione difficili come questo ...
Nota: ho realizzato che sto usando endianness
in qualche modo colloquiale per fare riferimento al valore dell'ordine / luogo delle parti del componente digitale (siano essi bit, byte o parole) in un insieme più grande, in qualsiasi ambiente. Non sto parlando di endianness
livello macchina o endianness di trasmissione seriale. Quasi la semantica del valore del posto in generale. Quindi non esiste un contesto per il targeting di diverse macchine / tecniche di trasmissione o qualcosa del genere.