Les sources de cet exercice se trouvent dans le répertoire "./TP-CORBA/EXO2".
Nous regardons maintenant comment on définit en IDL
des types construits puis, comment ceux-ci sont utilisés
en C++. Les types construits que nous allons manipuler
dans cet exercice sont des structures et des séquences.
Une structure en IDL est déclarée et utilisée comme une structure C ou C++.
Bien entendu, une structure peut être utilisée comme paramètre
en in, out ou inout d'une méthode.
La séquence est un tableau d'éléments quelconques. Une séquence peut être
de taille bornée ou non. Nous
nous intéresserons ici aux séquences non bornées. Celles-ci utilisent une taille courante,
qu'il est important de positionner avant de manipuler la séquence.
Dans le mapping C++, CORBA spécifie pour chaque
type de donnée, et en fonction de son
utilisation (in, out ou inout), si c'est au client ou au serveur
d'allouer (statiquement ou dynamiquement) la mémoire pour les paramètres.
De même, le mapping définit aussi la signature des méthodes
constituant l'implantation des interfaces IDL (en C++, un objet est implanté
par une classe). Nous donnons ici les
informations nécessaires dans le cadre de cet exercice :
_
proxy_
conversion
qui est la souche pour l'interface conversion.
Si vous souhaitez regarder la gestion de la mémoire pour tous les types IDL, ou si vous souhaitez obtenir les règles qui définissent les signatures de la classe d'implémentation, vous pouvez consulter les cinq tableaux de ce fichier qui sont extraits du mapping C++ défini dans CORBA 2.0.
Le mapping des structures IDL en structures C++ ne pose pas de problème particulier.
Les séquences sont implantées sous forme d'une classe C++. Une taille maximale de la
séquence doit être précisée lors de l'instanciation de cette classe. Enfin,
la méthode length() permet de positionner la taille courante de la séquence. Attention
de ne pas manipuler une séquence dont la taille courante ne serait pas initialisée.
Un exemple d'utilisation de séquence est donné dans le fichier client.cc.
L'objectif de cet exercice est le suivant :
Des exemples d'utilisation de ces méthodes sont données dans client.cc. On n'oubliera pas de spécifier quelles sont les exceptions que les méthodes peuvent être amenées à lever.
_
impl.hh
_
impl.cc. On ne vous demande pas de rédiger le code
de ces méthodes sauf pour la méthode convertir. Pour cette
dernière, on pourra s'aider de strtol et de ltostr
pour convertir la donnée dans un format intermédiaire (long). La
fonction ltostr utilise les mêmes paramètres que strtol (voir
ltostr.hh).