Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
CaseOptionExtended.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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.h (C) 2000-2023 */
9/* */
10/* Option du jeu de données de type 'Extended'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CASEOPTIONEXTENDED_H
13#define ARCANE_CASEOPTIONEXTENDED_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Array.h"
18
19#include "arcane/core/CaseOptionSimple.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29/*!
30 * \brief Option du jeu de données de type étendu.
31 * \ingroup CaseOption
32 */
33class ARCANE_CORE_EXPORT CaseOptionExtended
34: public CaseOptionSimple
35{
36 public:
37
38 CaseOptionExtended(const CaseOptionBuildInfo& cob,const String& type_name)
39 : CaseOptionSimple(cob), m_type_name(type_name) {}
40
41 public:
42
43 void print(const String& lang,std::ostream& o) const override;
44 ICaseFunction* function() const override { return 0; }
45 void updateFromFunction(Real /*current_time*/,Integer /*current_iteration*/) override {}
46 void visit(ICaseDocumentVisitor* visitor) const override;
47
48 /*!
49 * \brief Positionne la valeur par défaut de l'option.
50 *
51 * Si l'option n'est pas pas présente dans le jeu de données, alors sa valeur sera
52 * celle spécifiée par l'argument \a def_value, sinon l'appel de cette méthode est sans effet.
53 */
54 void setDefaultValue(const String& def_value);
55
56 protected:
57
58 virtual bool _tryToConvert(const String& s) =0;
59
60 void _search(bool is_phase1) override;
61 bool _allowPhysicalUnit() override { return false; }
62
63 String _typeName() const { return m_type_name; }
64
65 private:
66
67 String m_type_name; //!< Nom du type de l'option
68 String m_value; //!< Valeur de l'option sous forme de chaîne unicode
69};
70
71/*---------------------------------------------------------------------------*/
72/*---------------------------------------------------------------------------*/
73/*!
74 * \brief Option du jeu de donnée de type étendu.
75 *
76 * \ingroup CaseOption
77 * Cette classe se sert d'une fonction externe dont le prototype est:
78
79 \code
80 extern "C++" bool
81 _caseOptionConvert(const CaseOption&,const String&,T& obj);
82 \endcode
83
84 pour retrouver à partir d'une chaine de caractère un objet du type \a T.
85 Cette fonction retourne \a true si un tel objet n'est pas trouvé.
86 Si l'objet est trouvé, il est stocké dans \a obj.
87 */
88#ifndef SWIG
89template<class T>
91: public CaseOptionExtended
92{
93 public:
94
95 CaseOptionExtendedT(const CaseOptionBuildInfo& cob,const String& type_name)
96 : CaseOptionExtended(cob,type_name) {}
97
98 public:
99
100 //! Valeur de l'option
101 operator const T&() const { return value(); }
102
103 //! Valeur de l'option
104 const T& value() const
105 {
106 ARCANE_CASEOPTION_CHECK_IS_INITIALIZED;
107 return m_value;
108 }
109
110 //! Valeur de l'option
111 const T& operator()() const { return value(); }
112
113 //! Retourne la valeur de l'option si isPresent()==true ou sinon \a arg_value
114 const T& valueIfPresentOrArgument(const T& arg_value)
115 {
116 ARCANE_CASEOPTION_CHECK_IS_INITIALIZED;
117 return isPresent() ? m_value : arg_value;
118 }
119
120 protected:
121
122 virtual bool _tryToConvert(const String& s)
123 {
124 // La fonction _caseOptionConvert() doit être déclarée avant
125 // l'instantiation de cette template. Normalement le générateur automatique
126 // de config effectue cette opération.
127 return _caseOptionConvert(*this,s,m_value);
128 }
129
130 private:
131
132 T m_value; //!< Valeur de l'option
133};
134#endif
135
136/*---------------------------------------------------------------------------*/
137/*---------------------------------------------------------------------------*/
138/*!
139 * \brief Option du jeu de donnée de type liste de types étendus.
140 * \ingroup CaseOption
141 */
142class ARCANE_CORE_EXPORT CaseOptionMultiExtended
143: public CaseOptionBase
144{
145 public:
146
147 CaseOptionMultiExtended(const CaseOptionBuildInfo& cob,const String& type_name)
148 : CaseOptionBase(cob), m_type_name(type_name) {}
150
151 public:
152
153 void print(const String& lang,std::ostream& o) const override;
154 ICaseFunction* function() const override { return 0; }
155 void updateFromFunction(Real /*current_time*/,Integer /*current_iteration*/) override {}
156 void visit(ICaseDocumentVisitor* visitor) const override;
157
158 protected:
159
160 virtual bool _tryToConvert(const String& s,Integer pos) =0;
161 virtual void _allocate(Integer size) =0;
162 virtual bool _allowPhysicalUnit() { return false; }
163 virtual Integer _nbElem() const =0;
164 String _typeName() const { return m_type_name; }
165 void _search(bool is_phase1) override;
166
167 private:
168
169 String m_type_name; //!< Nom du type de l'option
170 UniqueArray<String> m_values; //!< Valeurs sous forme de chaînes unicodes.
171};
172
173/*---------------------------------------------------------------------------*/
174/*---------------------------------------------------------------------------*/
175/*!
176 * \brief Option du jeu de donnée de type liste de types étendus.
177 * \ingroup CaseOption
178 * \warning Toutes les méthodes de cette classe doivent être visible dans la
179 * déclaration (pour éviter des problèmes d'instanciation de templates).
180 * \sa CaseOptionExtendedT
181 */
182#ifndef SWIG
183template<class T>
186, public ArrayView<T>
187{
188 public:
189
190 typedef T Type; //!< Type de l'option.
191
192 public:
193
194 CaseOptionMultiExtendedT(const CaseOptionBuildInfo& cob,const String& type_name)
195 : CaseOptionMultiExtended(cob,type_name) {}
196 virtual ~CaseOptionMultiExtendedT() {} // delete[] _ptr(); }
197
198 public:
199
200 protected:
201
202 bool _tryToConvert(const String& s,Integer pos) override
203 {
204 // La fonction _caseOptionConvert() doit être déclarée avant
205 // l'instantiation de cette template. Normalement le générateur automatique
206 // d'options (axl2cc) effectue cette opération.
207 T& value = this->operator[](pos);
208 return _caseOptionConvert(*this,s,value);
209 }
210 void _allocate(Integer size) override
211 {
212 m_values.resize(size);
213 ArrayView<T>* view = this;
214 *view = m_values.view();
215 }
216 //virtual const void* _elemPtr(Integer i) const { return this->begin()+i; }
217 virtual Integer _nbElem() const override { return m_values.size(); }
218
219 private:
220
221 UniqueArray<T> m_values;
222};
223#endif
224
225/*---------------------------------------------------------------------------*/
226/*---------------------------------------------------------------------------*/
227
228} // End namespace Arcane
229
230/*---------------------------------------------------------------------------*/
231/*---------------------------------------------------------------------------*/
232
233#endif
Classe de base d'une option du jeu de donnée.
Option du jeu de donnée de type étendu.
const T & value() const
Valeur de l'option.
const T & valueIfPresentOrArgument(const T &arg_value)
Retourne la valeur de l'option si isPresent()==true ou sinon arg_value.
const T & operator()() const
Valeur de l'option.
Option du jeu de données de type étendu.
void updateFromFunction(Real, Integer) override
Met à jour la valeur de l'option à partir d'une fonction.
ICaseFunction * function() const override
Retourne la fonction liée à cette option ou nullptr s'il n'y en a pas.
Option du jeu de donnée de type liste de types étendus.
Option du jeu de donnée de type liste de types étendus.
ICaseFunction * function() const override
Retourne la fonction liée à cette option ou nullptr s'il n'y en a pas.
void updateFromFunction(Real, Integer) override
Met à jour la valeur de l'option à partir d'une fonction.
Classe de base des options simples (uniquement une valeur).
bool isPresent() const
Retourne true si l'option est présente.
Interface du visiteur pour une option du jeu de données.
Vue modifiable d'un tableau d'un type T.
constexpr Integer size() const noexcept
Retourne la taille du tableau.
constexpr reference operator[](Integer i)
i-ème élément du tableau.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.