10. Le traitement des objets JEVEUX#

Création des objets

La création des descripteurs (nom et attribut de classe, de genre et de type) des objets JEVEUX est réalisée à l’aide de la routine JECREO pour les objets simples, et par la routine JECREC pour les collections. Le décodage de la chaîne passée en argument pour affecter les attributs est effectué par la routine JJANAL. Dans le cas des objets de genre E les attributs de longueur sont directement affectés.

L’affectation des attributs

Les attributs génériques sont affectés lors de la création du nom d’objet simple ou de collection, ils figurent dans le tableau suivant :

  • pour les objets simples et les collections:

CLAS

classe de rattachement de l’objet à une base de données.

V: base Volatile, G: base Globale, L: base Locale , C: base des Catalogues compilés

GENR

genre de l’objet

E: variable simple, V: vecteur, N: répertoire de noms

TYPE

type Fortran de l’objet

I, R, C, L, K8, K16,K24, K32, K80

LTYP

longueur du type

gérée automatiquement pour les types I, R, C, L, normalisée à 8, 16, 24, 32 et 80 pour les caractères

  • pour les collections uniquement :

ACCES

Type d’accès : NOsi nommée, NUsi numérotée

NOpeut être suivie du nom du répertoire de noms

STOCKAGE

CONTIGou DISPERSE

MODELONG

mode de définition de la longueur des objets de collection : CONSTANTou VARIABLE

VARIABLEpeut être suivie du nom du pointeur de longueur

LONT

longueur totale d’une collection contiguë

NMAXOC

nombre maximum d’objets de la collection

Les autres attributs sont affectés à l’aide de la routine JEECRA, ces attributs figurent dans le tableau ci‑dessous :

  • pour les objets simples ou les objets de collection :

LONMAX

longueur de l’objet de genre V

NOMMAX

longueur de l’objet de genre N

LONUTI

longueur utilisée de l’objet de genre V

NOMUTI

longueur utilisée de l’objet de genre N

DOCU

champ documentaire (4 caractères)

La lecture des attributs

Les valeurs associées aux différents attributs peuvent être consultées à tout moment à l’aide de la routine JELIRA, y compris les attributs gérés en interne :

  • attributs internes accessibles :

DATE

date de dernier déchargement disque de l’objet

ORIG

non utilisé

IADM

adresse mémoire

IADD

adresse disque

LONO

longueur mesurée dans le type des segments de valeurs et suivant leur genre

USAGE

usage (statut et état) du segment de valeurs en mémoire : UD, UA, XD, XAou XX.

Le statut et l’état d’un segment de valeurs en mémoire peuvent être recueillis par cette routine en utilisant USAGE pour valeur de l’argument du nom d’attribut. La valeur XOUS pour ce même argument permet de déterminer si l’objet est une collection (X) ou un objet simple (S).

Remarque :

La consultation des attributs des objets de collection peut requérir la mise en mémoire des objets attribut, et leur libération en fin d’action. Une marque temporaire égale à -2 est affectée dans ce cas.

Requête d’accès aux objets

L’ensemble des requêtes d’accès aux objets JEVEUX (objets simples, objets de collection ou collections entières), qu’elles soient directes (JEVEUO, JEVEUS, JEVEUT) ou indirectes (JEEXIN, JENONU,…) suivent le processus suivant :

  • traitement du nom d’objet passé en argument par JJVERN,

  • éventuellement, mise en mémoire ou vérification de la présence en mémoire des objets système dans le cas d’une collection par la routine JJALLC, puis à l’aide de la routine JJCROC, détermination de l’identificateur d’objet de collection nommée ou vérification du numéro d’ordre de collection numérotée,

  • en fonction du type, appel à JJALTY pour obtenir l’adresse par rapport au tableau Z* du commun de référence,

  • éventuellement mise en mémoire puis affectation des identificateurs du segment de valeurs et de la marque, et détermination de l’adresse relative par la routine JXVEUO,

  • dans certains cas (par exemple les consultations d’attributs), libération de l’objet et/ou de la collection par JJLIDE.

Les attributs nécessaires à la description de l’objet JEVEUX sont relus ou déterminés par la routine JXVEUO, le traitement est immédiat pour les objets simples car on a accès directement aux attributs dans les objets système associés à la base, quelques opérations sont nécessaires pour traiter les attributs de collection ou d’objet de collection (positionnement dans les objets système de collection).

La variante JEVEUS alloue de façon permanente le segment de valeurs en mémoire.

Destruction des objets

La destruction d’un objet JEVEUX (objet simple, collection ou objet de collection dispersée) nécessite deux interventions : la destruction du segment de valeurs et la destruction des attributs. Pour un objet simple, le segment de valeurs peut posséder une image disque, dans ce cas il faut aussi détruire cette dernière, le ou les enregistrements correspondants seront marqués libres et pourront être récupérés plus tard. Le segment de valeurs en mémoire sera marqué libre. L’image disque, si elle existe sera marquée libre en utilisant, suivant le type d’objet, les descripteurs de l’enregistrement (objet système $$USADI) ou bien les descripteurs au sein d’un enregistrement (affectation du signe -). Cette fonction est assurée par la routine JXLIBD. Les attributs (nom, longueur, genre, etc.) seront libérés (routine JJMZAT) et leur position dans les objets système de la base associée sera disponible pour les nouvelles création de descripteur. L’objet système contenant l’adresse des objets marqués doit aussi être réactualisé. Le traitement d’un objet de collection est identique, l’actualisation des attributs est réalisée sur les objets système de la collection. Le segment de valeurs pour un objet de collection contiguë ne peut bien sûr pas être détruit. La destruction d’une collection est réalisée en détruisant l’ensemble des objets de collection et des objets système de la collection pourvu qu’ils ne soient pas partagés. Les routines JEDETR et JEDETC permettent de détruire des objets JEVEUX, la première travaille à partir d’un identificateur, la seconde, plus coûteuse, effectue tout d’abord une recherche de descripteur dans les répertoires des classes ouvertes à partir d’une chaîne de caractères à une position donnée. La routine JEDETV est uniquement utilisée pour détruire les objets sur la base volatile associée à la classe V entre les différentes commandes du Code_Aster .

Libération explicite des objets

Bien que le mécanisme de libération soit mis en œuvre avec la notion de marque et les appels obligatoires aux routines JEMARQ et JEDEMA, certaines configurations nécessitent un appel explicite aux routines de libération suivantes :

JELIBE libère l’objet demandé en respectant la marque affectée,

JELIBS libère l’objet de nom passé en argument lorsque la marque associée vaut -3,

JELIBZ libère l’ensemble des objets associés à une classe dont la marque associée vaut -1.

Recopie des objets

L’utilitaire JEDUPO permet de dupliquer un objet JEVEUX (objet simple, ou collection complète) éventuellement en déposant le résultat sur une classe différente. Les nouveaux objets sont libérés en fin d’opération. Si cette action ne pose aucune difficulté pour les objets simples, certaines précautions sont à prendre concernant les collections s’appuyant sur des pointeurs externes. Ces derniers peuvent être recréés pour devenir des objets système propres à la collection (on ne bénéficie plus de la mise en commun des attributs concernés) ou bien être conservés tels quels, mais il n’est alors pas permis de déposer le résultat de la recopie sur une autre classe. Le réceptacle peut préexister (l’utilisateur fournit un nom ou une chaîne), dans ce cas il est détruit en début d’opération. La recopie ne nécessite pas obligatoirement la présence en mémoire des segments de valeurs à copier, ils peuvent être relus directement sur disque.

Il est possible de faire usage de l’utilitaire JEDUPC qui travaille à partir d’une sous-chaîne de caractères mais nécessite en revanche une recherche préalable des noms dans le répertoire (ce qui peut s’avérer coûteux).

Impression du contenu des segments de valeurs

L’utilitaire JEIMPO est chargé d’imprimer de façon agréable le contenu du (des) segment(s) de valeur(s) associé(s) aux objets JEVEUX. Les objets système (associés à une classe ou à une collection) sont traités par la routine JEPRAT. Une mise en mémoire pouvant être effectuée, une marque particulière (-2) est affectée aux segments de valeurs chargés. Suivant le type d’objet (objet simple, objet de collection ou collection) on récupère les attributs associés au(x) segment(s) de valeurs pour appeler la routine JJIMPO qui réalise le formatage des données.