Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
CaseOptionEnum.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/* CaseOptionEnum.h (C) 2000-2023 */
9/* */
10/* Option du jeu de données de type énuméré. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CASEOPTIONENUM_H
13#define ARCANE_CASEOPTIONENUM_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/CaseOptionSimple.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \internal
29 * \brief Nom d'une option du jeu de données.
30 * Cette classe permet de stocker le nom d'une option dans plusieurs
31 * langues.
32 */
33class ARCANE_CORE_EXPORT CaseOptionName
34{
35 public:
36
37 //! Construit une option de nom \a true_name
38 CaseOptionName(const String& true_name);
39 //! Constructeur de recopie
41 //! Libère les ressources
42 virtual ~CaseOptionName();
43
44 public:
45
46 /*! \brief retourne le nom de l'option dans le langage \a lang.
47 * Si aucune traduction n'est disponible dans le langage \a lang,
48 * c'est trueName() qui est retourné.
49 */
50 String name(const String& lang) const;
51 //! Retourne le vrai nom (non traduit) de l'option
52 String trueName() const { return m_true_name; }
53 /*!
54 \brief Ajoute une traduction pour le nom de l'option.
55 Ajoute le nom \a tname correspondant au langage \a lang.
56 Si une traduction existe déjà pour ce langage, elle est remplacée par
57 celle-ci.
58 \param tname traduction du nom
59 \param lang langue de la traduction
60 */
61 void addAlternativeNodeName(const String& lang, const String& tname);
62
63 private:
64
65 String m_true_name; //!< Nom de l'option
66 StringDictionary* m_translations; //!< Traductions.
67};
68
69/*---------------------------------------------------------------------------*/
70/*---------------------------------------------------------------------------*/
71/*!
72 * \internal
73 * \brief Nom et valeur d'une énumération du jeu de données.
74 */
75class ARCANE_CORE_EXPORT CaseOptionEnumValue
76: public CaseOptionName
77{
78 public:
79
80 CaseOptionEnumValue(const String& name, int value);
81 //! Constructeur de recopie
84
85 public:
86
87 int value() const { return m_value; }
88
89 private:
90
91 int m_value;
92};
93
94/*---------------------------------------------------------------------------*/
95/*---------------------------------------------------------------------------*/
96/*!
97 * \internal
98 * \brief Ensemble des valeurs d'une énumération.
99 */
100class ARCANE_CORE_EXPORT CaseOptionEnumValues
101{
102 public:
103
104 //! Type de la liste des valeurs
106
107 public:
108
109 //! Contruit l'instance
111 ~CaseOptionEnumValues(); //!< Libère les ressources
112
113 public:
114
115 /*! \brief Ajoute la valeur d'énumération \a value.
116 * L'instance devient propriétaire de \a value qui est détruite
117 * lorsqu'elle n'est plus utilisée.
118 * Cette fonction ne doit être appelée qu'à l'initialisation.
119 * Si \a do_clone est vrai, c'est une copie de \a value qui est utilisée
120 */
121 void addEnumValue(CaseOptionEnumValue* value, bool do_clone);
122
123 //! Retourne le nombre de valeurs de l'énumération
124 Integer nbEnumValue() const;
125
126 //! Retourne la ième valeur
127 CaseOptionEnumValue* enumValue(Integer index) const;
128
129 /*! \brief Retourne la valeur de l'énumération ayant le nom \a name
130 *
131 * La valeur est retournée dans \a index.
132 * \param name nom de l'énumération
133 * \param lang est le langage du jeu de données
134 * \param value est la valeur de l'énumération (en retour)
135 * \retval true en cas d'erreur,
136 * \retval false en cas de succès.
137 */
138 bool valueOfName(const String& name, const String& lang, int& value) const;
139
140 //! Retourne le nom de correspondant à la valeur \a value pour le langage \a lang
141 String nameOfValue(int value, const String& lang) const;
142
143 /*!
144 * \brief Remplit \a names avec les noms valides pour la langue \a lang.
145 */
146 void getValidNames(const String& lang, StringArray& names) const;
147
148 private:
149
150 EnumValueList* m_enum_values; //!< Valeurs de l'énumération
151};
152
153/*---------------------------------------------------------------------------*/
154/*---------------------------------------------------------------------------*/
155/*!
156 * \brief Option du jeu de donnée de type énumération.
157 * \ingroup CaseOption
158 */
159class ARCANE_CORE_EXPORT CaseOptionEnum
160: public CaseOptionSimple
161{
162 public:
163
164 CaseOptionEnum(const CaseOptionBuildInfo& cob, const String& type_name);
166
167 public:
168
169 virtual void print(const String& lang, std::ostream& o) const;
170 virtual void updateFromFunction(Real current_time, Integer current_iteration)
171 {
172 _updateFromFunction(current_time, current_iteration);
173 }
174
175 void addEnumValue(CaseOptionEnumValue* value, bool do_clone)
176 {
177 m_enum_values->addEnumValue(value, do_clone);
178 }
179 CaseOptionEnumValues* enumValues() const { return m_enum_values; }
180
181 virtual void visit(ICaseDocumentVisitor* visitor) const;
182
183 int enumValueAsInt() const { return _optionValue(); }
184
185 public:
186 protected:
187
188 virtual void _search(bool is_phase1);
189 virtual bool _allowPhysicalUnit() { return false; }
190
191 //! Positionne à \a v la valeur de l'option
192 virtual void _setOptionValue(int v) = 0;
193 //! Retourne la valeur de l'option
194 virtual int _optionValue() const = 0;
195
196 protected:
197
198 void _setEnumDefaultValue(int def_value);
199
200 private:
201
202 String m_type_name; //!< Nom de l'énumération
203 CaseOptionEnumValues* m_enum_values;
204 void _updateFromFunction(Real current_time, Integer current_iteration);
205};
206
207/*---------------------------------------------------------------------------*/
208/*---------------------------------------------------------------------------*/
209/*!
210 * \ingroup CaseOption
211 * \brief Option du jeu de données de type énuméré.
212 *
213 * \a T est le type informatique de l'énumération.
214 */
215template <class EnumType>
217: public CaseOptionEnum
218{
219 public:
220
221 CaseOptionEnumT(const CaseOptionBuildInfo& cob, const String& type_name)
222 : CaseOptionEnum(cob, type_name)
223 , m_value(EnumType())
224 {}
225
226 public:
227
228 //! Valeur de l'option
229 EnumType value() const
230 {
231 ARCANE_CASEOPTION_CHECK_IS_INITIALIZED;
232 return m_value;
233 }
234
235 //! Valeur de l'option
236 operator EnumType() const { return value(); }
237
238 //! Valeur de l'option
239 EnumType operator()() const { return value(); }
240
241 /*!
242 * \brief Positionne la valeur par défaut de l'option.
243 *
244 * Si l'option n'est pas pas présente dans le jeu de données, alors sa valeur sera
245 * celle spécifiée par l'argument \a def_value, sinon l'appel de cette méthode est sans effet.
246 */
247 void setDefaultValue(EnumType def_value)
248 {
249 _setEnumDefaultValue(static_cast<int>(def_value));
250 }
251
252 //! Retourne la valeur de l'option si isPresent()==true ou sinon \a arg_value
253 EnumType valueIfPresentOrArgument(EnumType arg_value)
254 {
255 ARCANE_CASEOPTION_CHECK_IS_INITIALIZED;
256 return isPresent() ? m_value : arg_value;
257 }
258
259 private:
260
261 EnumType m_value; //!< Valeur de l'option
262
263 public:
264 protected:
265
266 virtual void _setOptionValue(int i)
267 {
268 m_value = static_cast<EnumType>(i);
269 }
270 virtual int _optionValue() const
271 {
272 return static_cast<int>(m_value);
273 }
274};
275
276/*---------------------------------------------------------------------------*/
277/*---------------------------------------------------------------------------*/
278/*!
279 * \brief Option du jeu de données de type liste d'énumération.
280 * \ingroup CaseOption
281 */
282class ARCANE_CORE_EXPORT CaseOptionMultiEnum
283: public CaseOptionBase
284{
285 public:
286 public:
287
288 CaseOptionMultiEnum(const CaseOptionBuildInfo& cob, const String& type_name);
290
291 public:
292
293 virtual void print(const String& lang, std::ostream& o) const;
294 virtual ICaseFunction* function() const { return 0; }
295 virtual void updateFromFunction(Real /*current_time*/, Integer /*current_iteration*/) {}
296
297 void addEnumValue(CaseOptionEnumValue* value, bool do_clone)
298 {
299 m_enum_values->addEnumValue(value, do_clone);
300 }
301
302 CaseOptionEnumValues* enumValues() const { return m_enum_values; }
303
304 virtual void visit(ICaseDocumentVisitor* visitor) const;
305
306 protected:
307
308 virtual void _search(bool is_phase1);
309 virtual bool _allowPhysicalUnit() { return false; }
310
311 //! Alloue un tableau pour \a size éléments
312 virtual void _allocate(Integer size) = 0;
313 //! Retourne le nombre d'éléments du tableau.
314 virtual Integer _nbElem() const = 0;
315 /*! Positionne la valeur de l'option à la valeur \a v.
316 * \a v est directement convertie en la valeur de l'énumération.
317 */
318 virtual void _setOptionValue(Integer index, int v) = 0;
319 //! Retourne la valeur de l'énumération pour l'indice \a index.
320 virtual int _optionValue(Integer index) const = 0;
321
322 private:
323
324 String m_type_name; //!< Nom de l'énumération
325 CaseOptionEnumValues* m_enum_values;
326};
327
328/*---------------------------------------------------------------------------*/
329/*---------------------------------------------------------------------------*/
330/*!
331 * \brief Option du jeu de données de type liste de types énumérés.
332 * \ingroup CaseOption
333 */
334template <class T>
336: public CaseOptionMultiEnum
337, public ArrayView<T>
338{
339 public:
340
341 typedef T Type; //!< Type de l'option.
342
343 public:
344
345 CaseOptionMultiEnumT(const CaseOptionBuildInfo& cob, const String type_name)
346 : CaseOptionMultiEnum(cob, type_name)
347 {}
348
349 protected:
350
351 virtual void _allocate(Integer size)
352 {
353 m_values.resize(size);
354 ArrayView<T>* view = this;
355 *view = m_values.view();
356 }
357 virtual Integer _nbElem() const
358 {
359 return this->size();
360 }
361 virtual void _setOptionValue(Integer index, int v)
362 {
363 (*this)[index] = static_cast<T>(v);
364 }
365 virtual int _optionValue(Integer index) const
366 {
367 return static_cast<int>((*this)[index]);
368 }
369
370 private:
371
372 UniqueArray<T> m_values;
373};
374
375/*---------------------------------------------------------------------------*/
376/*---------------------------------------------------------------------------*/
377
378} // End namespace Arcane
379
380/*---------------------------------------------------------------------------*/
381/*---------------------------------------------------------------------------*/
382
383#endif
Classe de base d'une option du jeu de donnée.
Option du jeu de données de type énuméré.
EnumType value() const
Valeur de l'option.
EnumType operator()() const
Valeur de l'option.
void setDefaultValue(EnumType def_value)
Positionne la valeur par défaut de l'option.
virtual void _setOptionValue(int i)
Positionne à v la valeur de l'option.
EnumType valueIfPresentOrArgument(EnumType arg_value)
Retourne la valeur de l'option si isPresent()==true ou sinon arg_value.
virtual int _optionValue() const
Retourne la valeur de l'option.
UniqueArray< CaseOptionEnumValue * > EnumValueList
Type de la liste des valeurs.
Option du jeu de donnée de type énumération.
virtual void _setOptionValue(int v)=0
Positionne à v la valeur de l'option.
virtual void updateFromFunction(Real current_time, Integer current_iteration)
Met à jour la valeur de l'option à partir d'une fonction.
virtual int _optionValue() const =0
Retourne la valeur de l'option.
Option du jeu de données de type liste de types énumérés.
virtual void _setOptionValue(Integer index, int v)
virtual Integer _nbElem() const
Retourne le nombre d'éléments du tableau.
virtual int _optionValue(Integer index) const
Retourne la valeur de l'énumération pour l'indice index.
virtual void _allocate(Integer size)
Alloue un tableau pour size éléments.
Option du jeu de données de type liste d'énumération.
virtual Integer _nbElem() const =0
Retourne le nombre d'éléments du tableau.
virtual void _allocate(Integer size)=0
Alloue un tableau pour size éléments.
virtual ICaseFunction * function() const
Retourne la fonction liée à cette option ou nullptr s'il n'y en a pas.
virtual void updateFromFunction(Real, Integer)
Met à jour la valeur de l'option à partir d'une fonction.
virtual int _optionValue(Integer index) const =0
Retourne la valeur de l'énumération pour l'indice index.
virtual void _setOptionValue(Integer index, int v)=0
String trueName() const
Retourne le vrai nom (non traduit) de l'option.
Classe de base des options simples (uniquement une valeur).
bool isPresent() const
Retourne true si l'option est présente.
Vue modifiable d'un tableau d'un type T.
constexpr Integer size() const noexcept
Retourne la taille du tableau.
Classe de base des vecteurs 1D de données.
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 -*-