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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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