Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
CaseOptions.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* CaseOptions.cc (C) 2000-2023 */
9/* */
10/* Gestion des options du jeu de données. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/core/CaseOptions.h"
15
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/FatalErrorException.h"
18
19#include "arcane/core/ICaseFunction.h"
20#include "arcane/core/ICaseMng.h"
21#include "arcane/core/ICaseDocument.h"
22#include "arcane/core/StringDictionary.h"
23#include "arcane/core/CaseNodeNames.h"
24#include "arcane/core/CaseOptionError.h"
25#include "arcane/core/ICaseDocumentVisitor.h"
26#include "arcane/core/MeshHandle.h"
27#include "arcane/core/IMeshMng.h"
28#include "arcane/core/IXmlDocumentHolder.h"
29#include "arcane/core/internal/ICaseMngInternal.h"
30#include "arcane/core/internal/ICaseOptionListInternal.h"
31
32#include "arcane/core/CaseOptionsMulti.h"
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
37namespace Arcane
38{
39
40/*---------------------------------------------------------------------------*/
41/*---------------------------------------------------------------------------*/
42
43namespace AxlOptionsBuilder
44{
45extern "C++" IXmlDocumentHolder*
46documentToXml(const Document& d);
47}
48
49/*---------------------------------------------------------------------------*/
50/*---------------------------------------------------------------------------*/
51
52
53/*---------------------------------------------------------------------------*/
54/*---------------------------------------------------------------------------*/
55/*!
56 * \internal
57 */
59{
60 public:
61
62 CaseOptionsPrivate(ICaseMng* cm,const String& name)
63 : m_case_mng(cm), m_name(name), m_true_name(name)
64 , m_mesh_handle(cm->meshMng()->defaultMeshHandle())
65 {
66 }
67
68 CaseOptionsPrivate(ICaseOptionList* co_list,const String& name)
69 : m_case_mng(co_list->caseMng()), m_name(name), m_true_name(name),
70 m_mesh_handle(co_list->meshHandle())
71 {
72 if (m_mesh_handle.isNull())
73 m_mesh_handle = m_case_mng->meshMng()->defaultMeshHandle();
74 }
75
77 {
78 delete m_own_case_document_fragment;
79 }
80
81 public:
82
83 ICaseOptionList* m_parent = nullptr;
84 ICaseMng* m_case_mng;
86 IModule* m_module = nullptr; //!< Module associé ou 0 s'il n'y en a pas.
87 IServiceInfo* m_service_info = nullptr; //!< Service associé ou 0 s'il n'y en a pas.
88 String m_name;
89 String m_true_name;
90 bool m_is_multi = false;
91 bool m_is_translated_name_set = false;
92 bool m_is_phase1_read = false;
93 StringDictionary m_name_translations;
94 ICaseFunction* m_activate_function = nullptr; //!< Fonction indiquand l'état d'activation
95 bool m_is_case_mng_registered = false;
96 MeshHandle m_mesh_handle;
97 // non-null si on possède notre propre instance de document
98 ICaseDocumentFragment* m_own_case_document_fragment = nullptr;
99 Ref<ICaseMng> m_case_mng_ref;
100};
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
104
106CaseOptions(ICaseMng* cm,const String& name)
107: m_p(new CaseOptionsPrivate(cm,name))
108{
109 m_p->m_config_list = ICaseOptionListInternal::create(cm,this,XmlNode());
110 m_p->m_is_case_mng_registered = true;
111 cm->registerOptions(this);
112}
113
114/*---------------------------------------------------------------------------*/
115/*---------------------------------------------------------------------------*/
116
118CaseOptions(ICaseOptionList* parent,const String& aname)
119: m_p(new CaseOptionsPrivate(parent,aname))
120{
121 m_p->m_config_list = ICaseOptionListInternal::create(parent,this,XmlNode());
122 _setParent(parent);
123}
124
125/*---------------------------------------------------------------------------*/
126/*---------------------------------------------------------------------------*/
127
129CaseOptions(ICaseMng* cm,const String& aname,const XmlNode& parent_elem)
130: m_p(new CaseOptionsPrivate(cm,aname))
131{
132 m_p->m_config_list = ICaseOptionListInternal::create(cm,this,parent_elem);
133 m_p->m_is_case_mng_registered = true;
134 cm->registerOptions(this);
135}
136
137/*---------------------------------------------------------------------------*/
138/*---------------------------------------------------------------------------*/
139
141CaseOptions(ICaseOptionList* parent,const String& aname,
142 const XmlNode& parent_elem,bool is_optional,bool is_multi)
143: m_p(new CaseOptionsPrivate(parent,aname))
144{
145 ICaseOptionList* col = ICaseOptionListInternal::create(parent,this,parent_elem,is_optional,is_multi);
146 m_p->m_config_list = col;
147 _setParent(parent);
148 if (is_multi)
149 _setTranslatedName();
150}
151
152/*---------------------------------------------------------------------------*/
153/*---------------------------------------------------------------------------*/
154
156CaseOptions(ICaseMng* cm,const String& aname,ICaseOptionList* config_list)
157: m_p(new CaseOptionsPrivate(cm,aname))
158{
159 m_p->m_config_list = config_list;
160 m_p->m_is_case_mng_registered = true;
161 cm->registerOptions(this);
162}
163
164/*---------------------------------------------------------------------------*/
165/*---------------------------------------------------------------------------*/
166
168CaseOptions(ICaseOptionList* parent,const String& aname,
169 ICaseOptionList* config_list)
170: m_p(new CaseOptionsPrivate(parent->caseMng(),aname))
171{
172 m_p->m_config_list = config_list;
173 _setParent(parent);
174}
175
176/*---------------------------------------------------------------------------*/
177/*---------------------------------------------------------------------------*/
178
180CaseOptions(ICaseMng* cm,const XmlContent& xml_content)
181: m_p(new CaseOptionsPrivate(cm,"dynamic-options"))
182{
183 // Ce constructeur est pour les options créées dynamiquement
184 IXmlDocumentHolder* xml_doc = xml_content.m_document;
185 XmlNode parent_elem = xml_doc->documentNode().documentElement();
186 m_p->m_config_list = ICaseOptionListInternal::create(cm,this,parent_elem);
187 m_p->m_own_case_document_fragment = cm->_internalImpl()->createDocumentFragment(xml_doc);
188 // Conserve une référence sur le ICaseMng pour le cas où cette option
189 // serait détruite après la fin du calcul et la destruction des sous-domaine.
190 m_p->m_case_mng_ref = cm->toReference();
191}
192
193/*---------------------------------------------------------------------------*/
194/*---------------------------------------------------------------------------*/
195
198{
199 detach();
200 if (m_p->m_is_case_mng_registered)
201 m_p->m_case_mng->unregisterOptions(this);
202 delete m_p;
203}
204
205/*---------------------------------------------------------------------------*/
206/*---------------------------------------------------------------------------*/
207
208/*---------------------------------------------------------------------------*/
209/*---------------------------------------------------------------------------*/
210
211void CaseOptions::
212detach()
213{
214 if (m_p->m_parent)
215 m_p->m_parent->removeChild(this);
216 m_p->m_parent = nullptr;
217 m_p->m_config_list = nullptr;
218}
219
220/*---------------------------------------------------------------------------*/
221/*---------------------------------------------------------------------------*/
222
224rootTagTrueName() const
225{
226 return m_p->m_true_name;
227}
228
229/*---------------------------------------------------------------------------*/
230/*---------------------------------------------------------------------------*/
231
233rootTagName() const
234{
235 return m_p->m_name;
236}
237
238/*---------------------------------------------------------------------------*/
239/*---------------------------------------------------------------------------*/
240
242isPresent() const
243{
244 return m_p->m_config_list->isPresent();
245}
246
247/*---------------------------------------------------------------------------*/
248/*---------------------------------------------------------------------------*/
249
251xpathFullName() const
252{
253 return m_p->m_config_list->xpathFullName();
254}
255
256/*---------------------------------------------------------------------------*/
257/*---------------------------------------------------------------------------*/
258
260addAlternativeNodeName(const String& lang,const String& name)
261{
262 // On ne doit plus modifier les traductions une fois que le nom traduit
263 // a été positionné. Cela peut se produire avec les services si ces
264 // derniers ont une traduction dans leur axl. Dans ce cas, cette
265 // dernière surcharge celle de l'option parente ce qui peut rendre
266 // les noms incohérents.
267 if (m_p->m_is_translated_name_set)
268 return;
269 m_p->m_name_translations.add(lang,name);
270}
271
272/*---------------------------------------------------------------------------*/
273/*---------------------------------------------------------------------------*/
274
275ICaseOptionList* CaseOptions::
276configList()
277{
278 return m_p->m_config_list.get();
279}
280
281/*---------------------------------------------------------------------------*/
282/*---------------------------------------------------------------------------*/
283
284const ICaseOptionList* CaseOptions::
285configList() const
286{
287 return m_p->m_config_list.get();
288}
289
290/*---------------------------------------------------------------------------*/
291/*---------------------------------------------------------------------------*/
292
298
299/*---------------------------------------------------------------------------*/
300/*---------------------------------------------------------------------------*/
301
303caseModule() const
304{
305 return m_p->m_module;
306}
307
308/*---------------------------------------------------------------------------*/
309/*---------------------------------------------------------------------------*/
310
316
317/*---------------------------------------------------------------------------*/
318/*---------------------------------------------------------------------------*/
319
322{
323 m_p->m_module = m;
324}
325
326/*---------------------------------------------------------------------------*/
327/*---------------------------------------------------------------------------*/
328
329ICaseMng* CaseOptions::
330caseMng() const
331{
332 return m_p->m_case_mng;
333}
334
335/*---------------------------------------------------------------------------*/
336/*---------------------------------------------------------------------------*/
337
338ITraceMng* CaseOptions::
339traceMng() const
340{
341 return m_p->m_case_mng->traceMng();
342}
343
344/*---------------------------------------------------------------------------*/
345/*---------------------------------------------------------------------------*/
346
348subDomain() const
349{
350 return m_p->m_case_mng->subDomain();
351}
352
353/*---------------------------------------------------------------------------*/
354/*---------------------------------------------------------------------------*/
355
356MeshHandle CaseOptions::
357meshHandle() const
358{
359 return m_p->m_mesh_handle;
360}
361
362/*---------------------------------------------------------------------------*/
363/*---------------------------------------------------------------------------*/
364
365IMesh* CaseOptions::
366mesh() const
367{
368 return meshHandle().mesh();
369}
370
371/*---------------------------------------------------------------------------*/
372/*---------------------------------------------------------------------------*/
373
374ICaseDocument* CaseOptions::
375caseDocument() const
376{
377 return caseMng()->caseDocument();
378}
379
380/*---------------------------------------------------------------------------*/
381/*---------------------------------------------------------------------------*/
382
383ICaseDocumentFragment* CaseOptions::
384caseDocumentFragment() const
385{
386 auto* x = m_p->m_own_case_document_fragment;
387 if (x)
388 return x;
389 return caseMng()->caseDocumentFragment();
390}
391
392/*---------------------------------------------------------------------------*/
393/*---------------------------------------------------------------------------*/
394
395void CaseOptions::
396_setMeshHandle(const MeshHandle& handle)
397{
398 traceMng()->info(5) << "SetMeshHandle for " << m_p->m_name << " mesh_name=" << handle.meshName();
399 m_p->m_mesh_handle = handle;
400}
401
402/*---------------------------------------------------------------------------*/
403/*---------------------------------------------------------------------------*/
404
405void CaseOptions::
406_setParent(ICaseOptionList* parent)
407{
408 parent->addChild(this);
409 m_p->m_parent = parent;
410 _setMeshHandle(parent->meshHandle());
411}
412
413/*---------------------------------------------------------------------------*/
414/*---------------------------------------------------------------------------*/
415/*!
416 * \brief Positionne le maillage associé à cette option.
417 *
418 * Si \a mesh_name est nul ou vide alors le maillage associé à cette
419 * option est celui de l'option parente. Si l'option n'a pas de parent alors
420 * c'est le maillage par défaut.
421 *
422 * Si \a mesh_name n'est pas nul, il y a deux possibilités:
423 * - si le maillage spécifié existe alors l'option sera associée à ce maillage
424 * - s'il n'existe pas, alors l'option est désactivée et les éventuelles options
425 * filles ne seront pas lues. Ce dernier cas arrive par exemple si un service
426 * est associé à un maillage supplémentaire mais que ce dernier est optionnel.
427 * Dans ce cas l'option ne doit pas être lue.
428 *
429 * \retval true si l'option est désactivée suite à cet appel.
430 */
433{
434 if (mesh_name.empty()){
435 // Mon maillage est celui de mon parent
436 if (m_p->m_parent)
437 _setMeshHandle(m_p->m_parent->meshHandle());
438 }
439 else{
440 // Un maillage différent du maillage par défaut est associé à l'option.
441 // Récupère le MeshHandle associé s'il n'existe. S'il n'y en a pas on
442 // désactive l'option.
443 // Si aucun maillage du nom de celui qu'on cherche n'existe, n'alloue pas le service
444 MeshHandle* handle = caseMng()->meshMng()->findMeshHandle(mesh_name,false);
445 if (!handle){
446 m_p->m_config_list->disable();
447 return true;
448 }
449 _setMeshHandle(*handle);
450 }
451 return false;
452}
453
454/*---------------------------------------------------------------------------*/
455/*---------------------------------------------------------------------------*/
456
457void CaseOptions::
458_setTranslatedName()
459{
460 String lang = caseDocumentFragment()->language();
461 if (m_p->m_is_translated_name_set)
462 traceMng()->info() << "WARNING: translated name already set for " << m_p->m_name;
463 if (lang.null())
464 m_p->m_name = m_p->m_true_name;
465 else{
466 String tr = m_p->m_name_translations.find(lang);
467 if (!tr.null()){
468 m_p->m_name = tr;
469 }
470 }
471 m_p->m_is_translated_name_set = true;
472}
473
474/*---------------------------------------------------------------------------*/
475/*---------------------------------------------------------------------------*/
476
478translatedName(const String& lang) const
479{
480 if (!lang.null()){
481 String tr = m_p->m_name_translations.find(lang);
482 if (!tr.null())
483 return tr;
484 }
485 return m_p->m_true_name;
486}
487
488/*---------------------------------------------------------------------------*/
489/*---------------------------------------------------------------------------*/
490
496
497/*---------------------------------------------------------------------------*/
498/*---------------------------------------------------------------------------*/
499
500void CaseOptions::
501read(eCaseOptionReadPhase read_phase)
502{
503 ITraceMng* tm = traceMng();
504 bool is_phase1 = read_phase==eCaseOptionReadPhase::Phase1;
505 if (is_phase1 && m_p->m_is_phase1_read)
506 return;
507
508 if (is_phase1 && !m_p->m_is_translated_name_set)
509 _setTranslatedName();
510
511 m_p->m_config_list->readChildren(is_phase1);
512
513 if (is_phase1){
514 ICaseDocumentFragment* doc = caseDocumentFragment();
515 // Lit la fonction d'activation (si elle est présente)
516 XmlNode velem = m_p->m_config_list->rootElement();
517 CaseNodeNames* cnn = doc->caseNodeNames();
518 String func_activation_name = velem.attrValue(cnn->function_activation_ref);
519 if (!func_activation_name.null()){
520 ICaseFunction* func = caseMng()->findFunction(func_activation_name);
521 if (!func){
522 CaseOptionError::addError(doc,A_FUNCINFO,velem.xpathFullName(),
523 String::format("No function with the name '{0}' exists",
524 func_activation_name));
525 }
526 else if (func->paramType()!=ICaseFunction::ParamReal){
527 CaseOptionError::addError(doc,A_FUNCINFO,velem.xpathFullName(),
528 String::format("The function '{0}' requires a parameter of type 'time'",
529 func_activation_name));
530 }
531 else if (func->valueType()!=ICaseFunction::ValueBool){
532 CaseOptionError::addError(doc,A_FUNCINFO,velem.xpathFullName(),
533 String::format("The function '{0}' requires a parameter of type 'bool'",
534 func_activation_name));
535 }
536 else {
537 m_p->m_activate_function = func;
538 tm->info() << "Use the function '" << func->name() << "' to activate the option "
539 << velem.xpathFullName();
540 }
541 }
542 // Vérifie que l'élément 'function' n'est pas présent
543 {
544 String func_name = velem.attrValue(cnn->function_ref);
545 if (!func_name.null())
546 CaseOptionError::addError(doc,A_FUNCINFO,velem.xpathFullName(),
547 String::format("Attribute <{0}> invalid.",
548 cnn->function_ref));
549 }
550 m_p->m_is_phase1_read = true;
551 }
552}
553
554/*---------------------------------------------------------------------------*/
555/*---------------------------------------------------------------------------*/
556/*! \brief Ajoute à \a nlist les éléments non reconnus.
557 */
560{
561 m_p->m_config_list->_internalApi()->addInvalidChildren(nlist);
562}
563
564/*---------------------------------------------------------------------------*/
565/*---------------------------------------------------------------------------*/
566
567void CaseOptions::
568printChildren(const String& lang,int indent)
569{
570 m_p->m_config_list->printChildren(lang,indent);
571}
572
573/*---------------------------------------------------------------------------*/
574/*---------------------------------------------------------------------------*/
575
577visit(ICaseDocumentVisitor* visitor) const
578{
579 m_p->m_config_list->visit(visitor);
580}
581
582/*---------------------------------------------------------------------------*/
583/*---------------------------------------------------------------------------*/
584
587{
588 m_p->m_config_list->deepGetChildren(col);
589}
590
591/*---------------------------------------------------------------------------*/
592/*---------------------------------------------------------------------------*/
593
595createDynamic(ICaseMng* cm, const AxlOptionsBuilder::Document& options_doc)
596{
597 XmlContent content;
598
599 IXmlDocumentHolder* xml_doc = AxlOptionsBuilder::documentToXml(options_doc);
600 content.m_document = xml_doc;
601
602 auto* opt = new CaseOptions(cm,content);
604}
605
606/*---------------------------------------------------------------------------*/
607/*---------------------------------------------------------------------------*/
608
609Ref<ICaseOptions> CaseOptions::
610toReference()
611{
612 return makeRef<ICaseOptions>(this);
613}
614
615/*---------------------------------------------------------------------------*/
616/*---------------------------------------------------------------------------*/
617
618/*---------------------------------------------------------------------------*/
619/*---------------------------------------------------------------------------*/
620
621CaseOptionsMulti::
622CaseOptionsMulti(ICaseMng* cm,const String& aname,const XmlNode& parent_element,
623 Integer min_occurs,Integer max_occurs)
624: CaseOptions(cm,aname,
625 ICaseOptionListInternal::create(this,this,cm,parent_element,
626 min_occurs,max_occurs))
627{
628}
629
630/*---------------------------------------------------------------------------*/
631/*---------------------------------------------------------------------------*/
632
633CaseOptionsMulti::
634CaseOptionsMulti(ICaseOptionList* parent,const String& aname,
635 const XmlNode& parent_element,
636 Integer min_occurs,Integer max_occurs)
637: CaseOptions(parent,aname,
638 ICaseOptionListInternal::create(this,this,parent,
639 parent_element,min_occurs,max_occurs))
640{
641}
642
643/*---------------------------------------------------------------------------*/
644/*---------------------------------------------------------------------------*/
645
646/*---------------------------------------------------------------------------*/
647/*---------------------------------------------------------------------------*/
648
649extern "C++" ARCANE_CORE_EXPORT ISubDomain*
650_arcaneDeprecatedGetSubDomain(ICaseOptions* opt)
651{
652 return opt->subDomain();
653}
654
655/*---------------------------------------------------------------------------*/
656/*---------------------------------------------------------------------------*/
657
658/*---------------------------------------------------------------------------*/
659/*---------------------------------------------------------------------------*/
660
661} // End namespace Arcane
662
663/*---------------------------------------------------------------------------*/
664/*---------------------------------------------------------------------------*/
Option 'ServiceInstance' du jeu de données.
static void addError(ICaseDocumentFragment *document, const TraceInfo &where, const String &node_name, const String &message, bool is_collective=false)
Erreur générique.
IModule * m_module
Module associé ou 0 s'il n'y en a pas.
ICaseFunction * m_activate_function
Fonction indiquand l'état d'activation.
IServiceInfo * m_service_info
Service associé ou 0 s'il n'y en a pas.
String xpathFullName() const override
Nom complet au format XPath correspondant à rootElement()
void addInvalidChildren(XmlNodeList &) override
Ajoute à nlist les éléments non reconnus.
bool isPresent() const override
Vrai si l'option est présente dans le fichier, faux s'il s'agit de la valeur par défaut.
bool _setMeshHandleAndCheckDisabled(const String &mesh_name)
Positionne le maillage associé à cette option.
void setCaseServiceInfo(IServiceInfo *m) override
Associe le service m à ce jeu de données.
void visit(ICaseDocumentVisitor *visitor) const override
Applique le visiteur sur cette option.
void addAlternativeNodeName(const String &lang, const String &name) override
Ajoute une traduction pour le nom de l'option. Ajoute le nom name de l'option correspondant au langag...
String rootTagName() const override
Retourne le nom de l'élément dans le langage du jeu de données.
String rootTagTrueName() const override
Retourne le vrai nom (non traduit) de l'élément.
ICaseFunction * activateFunction() override
Fonction indiquant l'état d'activation de l'option.
void setCaseModule(IModule *m) override
Associe le module m à ce jeu de données.
String translatedName(const String &lang) const override
Nom dans la langue lang de l'option. Retourne rootTagTrueName() si pas de traduction.
virtual String name() const
Retourne le nom de l'élément dans le langage du jeu de données.
~CaseOptions() override
Libère les ressources.
IServiceInfo * caseServiceInfo() const override
Retourne le service associé ou 0 s'il n'y en a pas.
IModule * caseModule() const override
Retourne le module associé ou 0 s'il n'y en a pas.
CaseOptionsPrivate * m_p
Implémentation.
ISubDomain * subDomain() const override
Sous-domain associé.
void deepGetChildren(Array< CaseOptionBase * > &col) override
Ajoute à la liste col tous les options filles.
CaseOptions(ICaseMng *cm, const String &name)
Construit un jeu d'options.
virtual CaseNodeNames * caseNodeNames()=0
Retourne l'instance contenant les noms des noeuds XML par langage.
virtual String language() const =0
Langage utilisé dans le jeu de données.
Interface du visiteur pour une option du jeu de données.
@ ParamReal
Paramètre de type Real.
@ ValueBool
Valeur de type entière.
virtual String name() const =0
nom de la fonction
virtual eValueType valueType() const =0
Type des valeurs de la fonction.
virtual eParamType paramType() const =0
Type du paramètre de la fonction.
Interface du gestionnaire de cas.
Definition ICaseMng.h:56
virtual ICaseMngInternal * _internalImpl()=0
Implémentation interne.
virtual IMeshMng * meshMng() const =0
Gestionnaire de maillage associé
virtual ITraceMng * traceMng()=0
Gestionnaire de traces.
virtual ISubDomain * subDomain()=0
Gestionnaire de sous-domaine.
virtual ICaseDocumentFragment * caseDocumentFragment()=0
Fragment du Document XML associé au jeu de données (peut être nul si pas de jeu de donneés)
virtual void unregisterOptions(ICaseOptions *)=0
Déseregistre une liste d'options du jeu de donnée.
virtual ICaseDocument * caseDocument()=0
Document XML du jeu de données (peut être nul si pas de jeu de donneés)
virtual ICaseFunction * findFunction(const String &name) const =0
Retourne la fonction de nom name ou nullptr s'il n'y en a pas.
virtual void registerOptions(ICaseOptions *)=0
Enregistre une liste d'options du jeu de donnée.
virtual ICaseMng * caseMng() const =0
Retourne le gestionnaire du cas.
virtual MeshHandle meshHandle() const =0
Handle du maillage associé
virtual void removeChild(ICaseOptions *co)=0
Supprime co de la liste des fils.
virtual MeshHandle * findMeshHandle(const String &name, bool throw_exception)=0
Recherche le maillage de nom name.
virtual MeshHandle defaultMeshHandle() const =0
Handle pour le maillage par défaut.
Interface d'un module.
Definition IModule.h:39
Interface des informations d'un service ou d'un module.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Gestionnaire d'un document DOM.
virtual XmlNode documentNode()=0
Noeud document. Ce noeud est nul si le document n'existe pas.
Handle sur un maillage.
Definition MeshHandle.h:47
bool isNull() const
Indique si le handle est nul (il ne référence aucun maillage existant ou non)
Definition MeshHandle.h:162
IMesh * mesh() const
Maillage associé.
void add(const String &key, const String &value)
Ajoute le couple (key,value) au dictionnaire.
String find(const String &key, bool throw_exception=false) const
Retourne la valeur associée à key.
Liste de noeuds d'un arbre DOM.
Definition XmlNodeList.h:33
Noeud d'un arbre DOM.
Definition XmlNode.h:51
String xpathFullName() const
Nom XPath du noeud avec ces ancêtres.
Definition XmlNode.cc:143
XmlNode documentElement() const
Retourne le noeud élément du document.
Definition XmlNode.cc:556
String attrValue(const String &name, bool throw_exception=false) const
Valeur de l'attribut name.
Definition XmlNode.cc:225
Classe de base des vecteurs 1D de données.
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
Encapsulation d'un pointeur avec compteur de référence.
Chaîne de caractères unicode.
bool empty() const
Vrai si la chaîne est vide (nulle ou "")
Definition String.cc:315
bool null() const
Retourne true si la chaîne est nulle.
Definition String.cc:304
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eCaseOptionReadPhase
Phases de la lecture.