Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
CaseOptionExtended.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/* CaseOptionExtended.cc (C) 2000-2023 */
9/* */
10/* Option du jeu de données de type 'Extended'. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/core/CaseOptionExtended.h"
15
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/FatalErrorException.h"
18
19#include "arcane/core/CaseOptionError.h"
20#include "arcane/core/ICaseDocumentVisitor.h"
21#include "arcane/core/XmlNodeList.h"
22#include "arcane/core/ICaseOptionList.h"
23#include "arcane/core/MeshHandle.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
43{
46
47 Integer size = elem_list.size();
48 _checkMinMaxOccurs(size);
49 if (size==0)
50 return;
51
52 if (is_phase1){
53 _allocate(size);
54 m_values.resize(size);
55 }
56 else{
57 //cerr << "** MULTI SEARCH " << size << endl;
58 for( Integer i=0; i<size; ++i ){
60 // Si l'option n'est pas présente dans le jeu de donnée, on prend
61 // l'option par défaut.
62 String str_val = (velem.null()) ? _defaultValue() : velem.value();
63 if (str_val.null()) {
65 name(),rootElement());
66 continue;
67 }
68 tm->info(5) << "TryConvert opt=" << _xpathFullName() << " i=" << i
69 << " mesh_name=" << parentOptionList()->meshHandle().meshName()
70 << " value=" << str_val;
71 bool is_bad = _tryToConvert(str_val,i);
72 if (is_bad){
73 m_values[i] = String();
75 name(),rootElement(),str_val,_typeName());
76 continue;
77 }
78 m_values[i] = str_val;
79 //ptr_value[i] = val;
80 //cerr << "** FOUND " << val << endl;
81 }
82 }
83}
84
85/*---------------------------------------------------------------------------*/
86/*---------------------------------------------------------------------------*/
87
89print(const String& lang,std::ostream& o) const
90{
91 ARCANE_UNUSED(lang);
92 for( Integer i=0, s=_nbElem(); i<s; ++i )
93 o << m_values[i] << " ";
94}
95
96/*---------------------------------------------------------------------------*/
97/*---------------------------------------------------------------------------*/
98
101{
102 visitor->applyVisitor(this);
103}
104
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
107
110{
111 // Si on a une valeur donnée par l'utilisateur, on ne fait rien.
112 if (isPresent())
113 return;
114
115 // Valeur déjà initialisée. Dans ce cas on remplace aussi la valeur
116 // actuelle.
117 if (_isInitialized()){
118 bool is_bad = _tryToConvert(def_value);
119 if (is_bad){
120 m_value = String();
121 ARCANE_FATAL("Can not convert '{0}' to type '{1}' (option='{2}')",
122 def_value,_typeName(),xpathFullName());
123 }
125 }
126
127 // La valeur par défaut n'a pas de langue associée.
128 _setDefaultValue(def_value);
129}
130
131/*---------------------------------------------------------------------------*/
132/*---------------------------------------------------------------------------*/
142_search(bool is_phase1)
143{
144 CaseOptionSimple::_search(is_phase1);
145 if (is_phase1)
146 return;
147 ITraceMng* tm = traceMng();
148 // Si l'option n'est pas présente dans le jeu de donnée, on prend
149 // l'option par défaut.
150 String str_val = (_element().null()) ? _defaultValue() : _element().value();
151 bool has_valid_value = true;
152 if (str_val.null()) {
153 m_value = String();
154 if (!isOptional()){
156 name(),rootElement());
157 return;
158 }
159 else
160 has_valid_value = false;
161 }
162 _setHasValidValue(has_valid_value);
163 if (has_valid_value){
164 tm->info(5) << "TryConvert opt=" << xpathFullName()
165 << " mesh_name=" << parentOptionList()->meshHandle().meshName()
166 << " value=" << str_val;
167 bool is_bad = _tryToConvert(str_val);
168 if (is_bad){
169 m_value = String();
171 name(),rootElement(),str_val,_typeName());
172 return;
173 }
175 }
176 _setIsInitialized();
177}
178
179/*---------------------------------------------------------------------------*/
180/*---------------------------------------------------------------------------*/
181
183print(const String& lang,std::ostream& o) const
184{
185 ARCANE_UNUSED(lang);
186 _checkIsInitialized();
187 if (hasValidValue())
188 o << m_value;
189 else
190 o << "undefined";
191}
192
193/*---------------------------------------------------------------------------*/
194/*---------------------------------------------------------------------------*/
195
198{
199 visitor->applyVisitor(this);
200}
201
202/*---------------------------------------------------------------------------*/
203/*---------------------------------------------------------------------------*/
204
205} // End namespace Arcane
206
207/*---------------------------------------------------------------------------*/
208/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
String name() const
Retourne le nom de l'option correspondant au langage du jeu de données.
String _defaultValue() const
Retourne la valeur par défaut de l'option ou 0 s'il n'y en a pas.
ICaseDocumentFragment * caseDocumentFragment() const
Retourne le document associé à cette option.
XmlNode rootElement() const
Retourne l'élément racine du DOM.
ITraceMng * traceMng() const
Gestionnaire de traces.
ICaseOptionList * parentOptionList() const
OptionList parent.
static void addInvalidTypeError(ICaseDocumentFragment *document, const TraceInfo &where, const String &node_name, const XmlNode &parent, const String &value, const String &expected_type)
Erreur lorsqu'une valeur d'une jeu de données n'est pas du bon type. Cette erreur est collective.
static void addOptionNotFoundError(ICaseDocumentFragment *document, const TraceInfo &where, const String &node_name, const XmlNode &parent)
Erreur lorsqu'une option du jeu de données n'est pas trouvée. Cette erreur est collective.
void _search(bool is_phase1) override
Cherche la valeur de l'option dans le jeu de donnée.
void setDefaultValue(const String &def_value)
Positionne la valeur par défaut de l'option.
String m_value
Valeur de l'option sous forme de chaîne unicode.
void print(const String &lang, std::ostream &o) const override
Imprime la valeur de l'option dans le langage lang,sur le flot o.
void visit(ICaseDocumentVisitor *visitor) const override
Applique le visiteur sur cette option.
UniqueArray< String > m_values
Valeurs sous forme de chaînes unicodes.
void print(const String &lang, std::ostream &o) const override
Imprime la valeur de l'option dans le langage lang,sur le flot o.
void _search(bool is_phase1) override
Cherche la valeur de l'option dans le jeu de données.
void visit(ICaseDocumentVisitor *visitor) const override
Applique le visiteur sur cette option.
String xpathFullName() const
Nom complet au format donné par la norme XPath.
bool hasValidValue() const
Indique si l'option a une valeur invalide.
bool isOptional() const
Indique si l'option est facultative.
bool isPresent() const
Retourne true si l'option est présente.
Interface du visiteur pour une option du jeu de données.
virtual MeshHandle meshHandle() const =0
Handle du maillage associé
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Liste de noeuds d'un arbre DOM.
Definition XmlNodeList.h:33
Noeud d'un arbre DOM.
Definition XmlNode.h:51
String value() const
Valeur du noeud.
Definition XmlNode.cc:199
XmlNodeList children(const String &name) const
Ensemble des noeuds fils de ce noeud ayant pour nom name.
Definition XmlNode.cc:93
bool null() const
Vrai si le noeud est nul.
Definition XmlNode.h:294
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
Interface du gestionnaire de traces.
Chaîne de caractères unicode.
TraceMessage info() const
Flot pour un message d'information.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-