classe d'une table d'octets (8 bits)
Bonjour
J'ai une classe cVector8Bits qui implemente une table d'octets (8 bits) dans un systeme dont la taille minimale est 16 bits.
La structure des donnees suit ce modele:
Le premier mot (16 bits) contient 2 octets Buffer[0] et buffer[1], le second mot Buffer[2] et buffer[3], etc...
On voit que l'index correspond aux octets mais physiquement, l'adresse du mot en fonction de l'index (n) est defini par *(Buffer + n/2).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
class cVector8Bits
{
uUint16 Buffer[SIZEMAX]; //Pour le type uUint16 cf. ci-dessous.
int16 Size;
public:
cVector8Bits( int16 size = 0) : Size( size) {}
const int16 & operator[]( int16 n) const
{ return n & 1 ? *(Buffer + n/2).byte.Lsb : *(Buffer + n/2).byte.Msb;}
int16 & operator=( int16 val) { ??????????}
}; |
Avec une union qui partage le 16 bits en 2 fois 8 bits:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
struct cUint16_Uint8
{
Uint16 Lsb : 8;
Uint16 Msb : 8;
};
union uUint16
{
Uint16 word;
cUint16_Uint8 byte;
}; |
J'ai un probleme pour l'ecriture de l'operateur =, qui doit necessairement tenir compte de l'index n.
Il existe toujours le moyen de creer une fonction:
Code:
1 2 3 4 5
|
cVector8Bits::ValueSet( int16 val, int16 n)
{ // Si n est pair on affecte le Lsb, s'il est impair on affecte le Msb
n & 1 ? *(Buffer + n/2).byte.Lsb = val : *(Buffer + n/2).byte.Msb = val;}
} |
Mais il me paraissait plus esthetique de surcharger l'operateur = pour pouvoir ecrire: Objet.Buffer[index] = valeur.
Quelqu'un aurait-il une idee pour implementer la surcharge de l'operateur =? Moi. je n'y arrive pas (encore).
Merci