Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
CaseOptionSimple.h
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/* CaseOptionSimple.h (C) 2000-2023 */
9/* */
10/* Option simple du jeu de données. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CASEOPTIONSIMPLE_H
13#define ARCANE_CASEOPTIONSIMPLE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/ICaseOptions.h"
18#include "arcane/core/CaseOptionBase.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26class IStandardFunction;
27class IPhysicalUnitConverter;
28class StringDictionary;
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32
33#ifdef ARCANE_CHECK
34#define ARCANE_CASEOPTION_CHECK_IS_INITIALIZED _checkIsInitialized()
35#else
36#define ARCANE_CASEOPTION_CHECK_IS_INITIALIZED
37#endif
38
39/*---------------------------------------------------------------------------*/
40/*---------------------------------------------------------------------------*/
41
42template<typename Type>
44{
45 public:
46 using ContainerType = Type;
47 using ReferenceType = Type&;
48 using ConstReferenceType = const Type&;
51};
52
53/*---------------------------------------------------------------------------*/
54/*---------------------------------------------------------------------------*/
62template<typename Type>
72
73/*---------------------------------------------------------------------------*/
74/*---------------------------------------------------------------------------*/
79class ARCANE_CORE_EXPORT CaseOptionSimple
80: public CaseOptionBase
81{
82 public:
83
87
88 public:
89
91 bool isPresent() const { return !m_element.null(); }
92
99 ARCANE_DEPRECATED_LONG_TERM("Y2022: Do not access XML item from option")
100 XmlNode element() const { return m_element; }
101
108 ICaseFunction* function() const override { return m_function; }
116 virtual IStandardFunction* standardFunction() const { return m_standard_function; }
124 bool hasChangedSinceLastIteration() const;
126 String xpathFullName() const;
131 String defaultPhysicalUnit() const;
133 String physicalUnit() const;
140 IPhysicalUnitConverter* physicalUnitConverter() const { return m_unit_converter; }
147 bool isOptional() const { return m_is_optional; }
148
155 bool hasValidValue() const { return m_has_valid_value; }
156
157 void visit(ICaseDocumentVisitor* visitor) const override;
158
159 protected:
160
161 void _search(bool is_phase1) override;
162 virtual bool _allowPhysicalUnit() =0;
163 void _setChangedSinceLastIteration(bool has_changed);
164 void _searchFunction(XmlNode& velem);
165 void _setPhysicalUnit(const String& value);
166 void _setHasValidValue(bool v) { m_has_valid_value = v; }
167 XmlNode _element() const { return m_element; }
168
169 static String _convertFunctionRealToString(ICaseFunction* func,Real t);
170 static String _convertFunctionIntegerToString(ICaseFunction* func,Integer t);
171
172 private:
173
175 ICaseFunction* m_function = nullptr;
176 IStandardFunction* m_standard_function = nullptr;
178 IPhysicalUnitConverter* m_unit_converter = nullptr;
179 bool m_changed_since_last_iteration = false;
180 bool m_is_optional = false;
181 bool m_has_valid_value = false;
182 String m_default_physical_unit;
183 String m_physical_unit;
184};
185
186/*---------------------------------------------------------------------------*/
187/*---------------------------------------------------------------------------*/
204template<class T>
206: public CaseOptionSimple
207{
208 public:
209
211#ifndef SWIG
212 typedef typename CaseOptionTraitsT<T>::ContainerType Type;
213#else
214 typedef T Type;
215#endif
216 public:
217
218 ARCANE_CORE_EXPORT CaseOptionSimpleT(const CaseOptionBuildInfo& cob);
219 ARCANE_CORE_EXPORT CaseOptionSimpleT(const CaseOptionBuildInfo& cob,const String& physical_unit);
220
221 public:
222
223 ARCANE_CORE_EXPORT virtual void print(const String& lang,std::ostream& o) const;
224
226 const Type& value() const
227 {
228 ARCANE_CASEOPTION_CHECK_IS_INITIALIZED;
229 return m_value;
230 }
231
233 operator const Type&() const { return value(); }
234
236 ARCANE_CORE_EXPORT Type valueAtParameter(Real t) const;
237
239 ARCANE_CORE_EXPORT Type valueAtParameter(Integer t) const;
240
242 //const Type& operator()() const { return value(); }
243 const Type& operator()() const { return value(); }
244
245#ifdef ARCANE_DOTNET
246 operator ThatClass*() { return this; }
247 operator const ThatClass*() const { return this; }
248 const ThatClass* operator->() const { return this; }
249 static Real castTo__Arcane_Real(const ThatClass& v)
250 {
251 return (Real)(v);
252 }
253#endif
254
256 ARCANE_DEPRECATED Type operator()(Real t) const
257 { return valueAtParameter(t); }
258
260 ARCANE_DEPRECATED Type operator()(Integer t) const
261 { return valueAtParameter(t); }
262
267 ARCANE_CORE_EXPORT virtual void updateFromFunction(Real current_time,Integer current_iteration);
268
275 ARCANE_CORE_EXPORT void setDefaultValue(const Type& def_value);
276
279 {
280 ARCANE_CASEOPTION_CHECK_IS_INITIALIZED;
281 return isPresent() ? m_value : arg_value;
282 }
283
284 protected:
285
286 ARCANE_CORE_EXPORT virtual void _search(bool is_phase1);
287 ARCANE_CORE_EXPORT virtual bool _allowPhysicalUnit();
288
289 private:
290
292
293};
294
295/*---------------------------------------------------------------------------*/
296/*---------------------------------------------------------------------------*/
297
298class ARCANE_CORE_EXPORT CaseOptionMultiSimple
299: public CaseOptionBase
300{
301 public:
304};
305
306/*---------------------------------------------------------------------------*/
307/*---------------------------------------------------------------------------*/
316#ifndef SWIG
317template<class T>
320#ifdef ARCANE_HAS_PRIVATE_CASEOPTIONSMULTISIMPLE_BASE_CLASS
321, private ArrayView<T>
322#else
323, public ArrayView<T>
324#endif
325{
326 public:
327
329 using Type = typename CaseOptionTraitsT<T>::ContainerType;
330 using ReferenceType = typename CaseOptionTraitsT<T>::ReferenceType;
331 using ConstReferenceType = typename CaseOptionTraitsT<T>::ConstReferenceType;
336
337 public:
338
339 ARCANE_CORE_EXPORT CaseOptionMultiSimpleT(const CaseOptionBuildInfo& cob);
340 ARCANE_CORE_EXPORT CaseOptionMultiSimpleT(const CaseOptionBuildInfo& cob,const String& physical_unit);
341 ARCANE_CORE_EXPORT ~CaseOptionMultiSimpleT();
342
343 public:
344
345 ARCCORE_DEPRECATED_2021("Use view() instead")
346 ArrayView<T> operator()()
347 {
348 return *this;
349 }
350 ARCCORE_DEPRECATED_2021("Use view() instead")
351 const ArrayView<T> operator()() const
352 {
353 return *this;
354 }
355
357 ARCCORE_DEPRECATED_2021("Use view() instead")
358 operator ArrayView<T>() { ArrayView<T>* v = this; return *v; }
359
361 ARCCORE_DEPRECATED_2021("Use view() instead")
362 operator ConstArrayView<T>() const { const ArrayView<T>* v = this; return *v; }
363
366 {
367 return m_view;
368 }
371 {
372 return m_view;
373 }
374
375 ConstReferenceType operator[](Integer i) const { return m_view[i]; }
376 ReferenceType operator[](Integer i) { return m_view[i]; }
377
378 public:
379
380 ARCANE_CORE_EXPORT void print(const String& lang,std::ostream& o) const override;
381 ICaseFunction* function() const override { return 0; }
382 void updateFromFunction(Real,Integer) override {}
383
384 ConstArrayView<T> values() const { const ArrayView<T>* v = this; return *v; }
385 const T& value(Integer index) const { return this->operator[](index); }
386 Integer size() const { return ArrayView<T>::size(); }
387 ARCANE_CORE_EXPORT void visit(ICaseDocumentVisitor* visitor) const override;
388
389 protected:
390
391 void _search(bool is_phase1) override;
392 virtual bool _allowPhysicalUnit();
393
394 private:
395 ArrayViewType m_view;
396};
397#endif
398
399/*---------------------------------------------------------------------------*/
400/*---------------------------------------------------------------------------*/
401
402typedef CaseOptionSimpleT<Real> CaseOptionReal;
403typedef CaseOptionSimpleT<Real2> CaseOptionReal2;
404typedef CaseOptionSimpleT<Real3> CaseOptionReal3;
405typedef CaseOptionSimpleT<Real2x2> CaseOptionReal2x2;
406typedef CaseOptionSimpleT<Real3x3> CaseOptionReal3x3;
407typedef CaseOptionSimpleT<bool> CaseOptionBool;
408typedef CaseOptionSimpleT<Integer> CaseOptionInteger;
409typedef CaseOptionSimpleT<Int32> CaseOptionInt32;
410typedef CaseOptionSimpleT<Int64> CaseOptionInt64;
411typedef CaseOptionSimpleT<String> CaseOptionString;
412
413typedef CaseOptionSimpleT<RealArray> CaseOptionRealArray;
414typedef CaseOptionSimpleT<Real2Array> CaseOptionReal2Array;
415typedef CaseOptionSimpleT<Real3Array> CaseOptionReal3Array;
416typedef CaseOptionSimpleT<Real2x2Array> CaseOptionReal2x2Array;
417typedef CaseOptionSimpleT<Real3x3Array> CaseOptionReal3x3Array;
418typedef CaseOptionSimpleT<BoolArray> CaseOptionBoolArray;
419typedef CaseOptionSimpleT<IntegerArray> CaseOptionIntegerArray;
420typedef CaseOptionSimpleT<Int32Array> CaseOptionInt32Array;
421typedef CaseOptionSimpleT<Int64Array> CaseOptionInt64Array;
422typedef CaseOptionSimpleT<StringArray> CaseOptionStringArray;
423
424/*---------------------------------------------------------------------------*/
425/*---------------------------------------------------------------------------*/
426
427} // End namespace Arcane
428
429/*---------------------------------------------------------------------------*/
430/*---------------------------------------------------------------------------*/
431
432#endif
#define ARCANE_DEPRECATED_LONG_TERM(reason)
Macro pour l'attribut 'deprecated' à long terme.
Tableau d'items de types quelconques.
Classe de base d'une option du jeu de donnée.
Informations pour construire une option de jeu de données.
Option du jeu de données de type liste de types simples (réel, entier, booléen, .....
typename CaseOptionTraitsT< T >::ConstArrayViewType ConstArrayViewType
Type de la vue constante sur les valeurs de l'option.
ConstArrayViewType view() const
Vue constante sur les éléments de l'option.
typename CaseOptionTraitsT< T >::ContainerType Type
Type de la valeur de l'option.
typename CaseOptionTraitsT< T >::ArrayViewType ArrayViewType
Type de la vue sur les valeurs de l'option.
void updateFromFunction(Real, Integer) override
Met à jour la valeur de l'option à partir d'une fonction.
void print(const String &lang, std::ostream &o) const override
Imprime la valeur de l'option dans le langage lang,sur le flot o.
ICaseFunction * function() const override
Retourne la fonction liée à cette option ou nullptr s'il n'y en a pas.
void visit(ICaseDocumentVisitor *visitor) const override
Applique le visiteur sur cette option.
void _search(bool is_phase1) override
Cherche la valeur de l'option dans le jeu de donnée.
ArrayViewType view()
Vue sur les éléments de l'option.
Option du jeu de données de type simple (réel, entier, booléen, ...)
const Type & valueIfPresentOrArgument(const Type &arg_value)
Retourne la valeur de l'option si isPresent()==true ou sinon arg_value.
virtual void _search(bool is_phase1)
Cherche la valeur de l'option dans le jeu de données.
ARCANE_DEPRECATED Type operator()(Real t) const
Retourne la valeur de l'option pour le paramètre réel t.
Type valueAtParameter(Real t) const
Retourne la valeur de l'option pour le paramètre réel t.
CaseOptionTraitsT< T >::ContainerType Type
Type de l'option.
virtual void print(const String &lang, std::ostream &o) const
Imprime la valeur de l'option dans le langage lang,sur le flot o.
const Type & value() const
Retourne la valeur de l'option.
const Type & operator()() const
Retourne la valeur de l'option.
ARCANE_DEPRECATED Type operator()(Integer t) const
Retourne la valeur de l'option pour le paramètre entier t.
Type m_value
Valeur de l'option.
virtual void updateFromFunction(Real current_time, Integer current_iteration)
void setDefaultValue(const Type &def_value)
Positionne la valeur par défaut de l'option.
Classe de base des options simples (uniquement une valeur).
XmlNode m_element
Element de l'option.
bool hasValidValue() const
Indique si l'option a une valeur invalide.
ICaseFunction * function() const override
Fonction associée à cette option (0 si aucune).
bool isOptional() const
Indique si l'option est facultative.
virtual IStandardFunction * standardFunction() const
Fonction standard associée à cette option (0 si aucune).
IPhysicalUnitConverter * physicalUnitConverter() const
Convertisseur d'unité physique.
bool isPresent() const
Retourne true si l'option est présente.
Interface du visiteur pour une option du jeu de données.
Interface d'une fonction du jeu de données.
Interface d'un convertisseur d'unité.
Interface gérant une fonction standard.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Noeud d'un arbre DOM.
Definition XmlNode.h:51
Vue modifiable d'un tableau d'un type T.
constexpr Integer size() const noexcept
Retourne la taille du tableau.
Vue constante d'un tableau de type T.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
Type
Type of JSON value.
Definition rapidjson.h:665