Déclaration de structure
PUBLIC STRUCT Identificateur
Champ 1 AS [ TypeDeDonnee ]
Champ 2 AS [ TypeDeDonnee ]
.
.
.
Champ n AS [ TypeDeDonnee ]
END STRUCT
Ce mot-clé déclare une structure.
Une structure est exactement comme une classe qui n'aurait que des variables publiques.
Si vous déclarez la même structure dans deux classes différentes, elles doivent avoir exactement les mêmes champs, sinon l'interpréteur provoquera une erreur.
Alignement des champs
Les structures ne sont jamais compactées, c.a.d. les champs sont alignés à une adresse mémoire qui est un multiple de leur longueur en mémoire :
-
Un Boolean ou un octet peut être placé à n’importe quelle adresse.
-
Un Short est placé à une adresse paire.
-
Un Integer est placé à une adresse multiple de quatre.
-
...etc.
Comme l’ordre de déclaration est respecté, vous pouvez avoir des trous dans votre structure.
Par exemple, si vous déclarez un fichier d’octets et, juste après, un champ d’
entiers, vous aurez un trou de trois octets.
Cela pose un problème : lorsqu’on compile un code source en C, le compilateur C risque de réordonner la structure des champs.
Et, pour autant que je sache, ce processus n’est pas standardisé ni documenté.
Il pourra y avoir une solution dans le futur avec la bibliothèque libffi utilisée par Gambas.
Apparemment, cette bibliothèque peut envoyer une structure à une fonction en C en prenant en compte ce problème. Mais cette bibliothèque est loin d’être documentée par Gambas, vous voyez donc la difficulté !
Structures intégrées
Une structure peut être intégrée dans une classe normale ou une autre structure, en déclarant une variable avec la syntaxe suivante :
[ PRIVATE | PUBLIC ] Identificateur AS STRUCT Nom de Structure
Exemple
' Fichier de classe Gambas
PUBLIC STRUCT Bras
Longueur AS Float
NombreDeDoigts AS Integer
PorteDesGants AS Boolean
END STRUCT
PUBLIC STRUCT Jambe
Longueur AS Float
NombreDeDoigts AS Integer
PorteDesChaussettes AS Boolean
PorteDesChaussures AS Boolean
END STRUCT
PUBLIC STRUCT Humain
Prenom AS String
Nom AS String
Age AS Integer
Yeux AS String
BrasGauche AS STRUCT Bras
BrasDroit AS STRUCT Bras
JambeGauche AS STRUCT Jambe
JambeDroite AS STRUCT Jambe
END STRUCT
Tableaux de structures
Identificateur [ Dimensions ] AS STRUCT NomDeStructure
Les structures sont intégrées, c.a.d. que leur contenu est directement alloué dans le tableau.
De tels tableaux ne sont pas des tableaux réels, ils ont simplement quelques méthodes de la classe array d'origine :
-
On peut y accéder par indices.
-
Ils peuvent être énumérés.
-
Vous pouvez obtenir des informations concernant la longueur du tableau et le nombre de dimensions.
C’est tout !
Vous ne pouvez créer que des tableaux de structures intégrés.
Voir aussi