Spero davvero che tu possa darmi dei punti di vista interessanti per la mia situazione, perché non sono soddisfatto del mio attuale approccio.
Sto scrivendo un parser MP3, iniziando con un parser ID3v2.
In questo momento sto lavorando sull'analisi estesa dell'intestazione, il mio problema è che l'intestazione opzionale è definita in modo diverso nella versione 2.3 e 2.4 del tag.
L'intestazione opzionale della versione 2.3 è definita come segue:
struct ID3_3_EXTENDED_HEADER{
DWORD dwExtHeaderSize; //Extended header size (either 6 or 8 bytes , excluded)
WORD wExtFlags; //Extended header flags
DWORD dwSizeOfPadding; //Size of padding (size of the tag excluding the frames and headers)
};
Mentre la versione 2.4 è definita:
struct ID3_4_EXTENDED_HEADER{
DWORD dwExtHeaderSize; //Extended header size (synchsafe int)
BYTE bNumberOfFlagBytes; //Number of flag bytes
BYTE bFlags; //Flags
};
Come posso analizzare l'intestazione riducendo al minimo la duplicazione del codice?
L'uso di due diverse funzioni per analizzare ogni versione suona meno bene, utilizzando una singola funzione con un flusso diverso per ogni occasione è simile, qualsiasi buona pratica per questo tipo di problemi? Qualche consiglio per evitare la duplicazione del codice?
Qualsiasi aiuto sarebbe apprezzato.