Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
CaseTable.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/* CaseTable.h (C) 2000-2023 */
9/* */
10/* Classe gérant une table de marche. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CASETABLE_H
13#define ARCANE_CASETABLE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/datatype/SmallVariant.h"
18
19#include "arcane/CaseFunction.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30class CaseTableParams;
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34/*!
35 * \internal
36 * \brief Fonction du jeu de donnée.
37 */
38class ARCANE_CORE_EXPORT CaseTable
39: public CaseFunction
40{
41 public:
42
43 /*!
44 * \brief Type des erreurs retournées par la classe.
45 */
46 enum eError
47 {
48 ErrNo,
49 //! Indique qu'un indice d'un élément n'est pas valide
51 //! Indique que la conversion du paramètre vers le type souhaité est impossible
53 //! Indique que la conversion de la valeur vers le type souhaité est impossible
55 //! Indique que le paramètre n'est pas supérieur au précédent
57 //! Indique que le paramètre n'est pas inférieur au suivant
58 ErrNotLesserThanNext
59 };
60
61 /*! \brief Type de la courbe de la table.
62 */
64 {
65 CurveUnknown = 0, //!< Type de courbe inconnu
66 CurveConstant = 1, //!< Courbe constante par morceau
67 CurveLinear = 2 //!< Courbe linéaire par morceau
68 };
69
70 public:
71
72 /*! \brief Construit une table de marche du jeu de données.
73 * \param curve_type type de la courbe de la table de marche
74 */
75 CaseTable(const CaseFunctionBuildInfo& info,eCurveType curve_type);
76 virtual ~CaseTable();
77
78 public:
79
80 //! Nombre d'éléments de la fonction
81 virtual Integer nbElement() const;
82
83 //! \id ième valeur dans la chaîne \a str
84 virtual void valueToString(Integer id,String& str) const;
85
86 //! \id ième paramètre dans la chaîne \a str
87 virtual void paramToString(Integer id,String& param) const;
88
89 /*!
90 * \brief Modifie le paramètre de l'élément \a id.
91 *
92 * Utilise \a value comme nouvelle valeur pour le paramètre.
93 * \a value doit pourvoir être converti en le type du paramètre.
94 *
95 * \return la valeur de l'erreur, ErrNo sinon.
96 */
97 virtual eError setParam(Integer id,const String& value);
98
99 /*!
100 * \brief Modifie la valeur de l'élément \a id.
101 *
102 * Utilise \a value comme nouvelle valeur.
103 * \a value doit pourvoir être converti en le type de la valeur.
104 *
105 * \return la valeur de l'erreur, ErrNo sinon.
106 */
107 virtual eError setValue(Integer id,const String& value);
108
109 /*! \brief Ajoute un élément à la table.
110 *
111 * Ajoute l'élément (param,value) à la table.
112 *
113 * \return la valeur de l'erreur, ErrNo sinon.
114 */
115 virtual eError appendElement(const String& param,const String& value);
116
117 /*!
118 * \brief Insère un couple (paramètre,valeur) dans la fonction.
119 *
120 * Insère à la position \a id un couple (paramètre,valeur) identique
121 * à celui qui s'y trouvait. Les paramètres suivants sont décalées d'un cran.
122 * Il est ensuite possible de modifier ce couple par les
123 * méthodes setParam() ou setValue().
124 *
125 * Si \a id est supérieur au nombre d'éléments de la fonction, un élément
126 * est ajouté à la fin avec la même valeur que le dernier élément de
127 * la fonction.
128 */
129 virtual void insertElement(Integer id);
130
131 /*!
132 * \brief Supprime un couple (paramètre,valeur) dans la fonction.
133 *
134 * Si \a id est supérieur au nombre d'éléments de la fonction, aucune
135 * opération n'est effectuée.
136 */
137 virtual void removeElement(Integer id);
138
139 /*! @name Type de la courbe */
140 //@{
141 //! Retourne le type de la courbe de la fonction
142 virtual eCurveType curveType() const { return m_curve_type; }
143 //@}
144
145 virtual void setParamType(eParamType type);
146
147 virtual bool checkIfValid() const;
148
149 virtual void value(Real param,Real& v) const;
150 virtual void value(Real param,Integer& v) const;
151 virtual void value(Real param,bool& v) const;
152 virtual void value(Real param,String& v) const;
153 virtual void value(Real param,Real3& v) const;
154 virtual void value(Integer param,Real& v) const;
155 virtual void value(Integer param,Integer& v) const;
156 virtual void value(Integer param,bool& v) const;
157 virtual void value(Integer param,String& v) const;
158 virtual void value(Integer param,Real3& v) const;
159
160 public:
161
162 private:
163
164 CaseTableParams* m_param_list;
165 UniqueArray<SmallVariant> m_value_list; //!< Liste des valeurs.
166 eCurveType m_curve_type; //!< Type de la courbe
167 bool m_use_fast_search = true;
168
169 private:
170
171 template<typename U,typename V> void _findValue(U param,V& value) const;
172 template<typename U,typename V> void _findValueAndApplyTransform(U param,V& value) const;
173
174 bool _isValidIndex(Integer index) const;
175 eError _setValue(Integer index,const String& value_str);
176};
177
178/*---------------------------------------------------------------------------*/
179/*---------------------------------------------------------------------------*/
180
181}
182
183/*---------------------------------------------------------------------------*/
184/*---------------------------------------------------------------------------*/
185
186#endif
Informations pour construire une instance de CaseFunction.
virtual eCurveType curveType() const
Retourne le type de la courbe de la fonction.
Definition CaseTable.h:142
eCurveType
Type de la courbe de la table.
Definition CaseTable.h:64
eError
Type des erreurs retournées par la classe.
Definition CaseTable.h:47
@ ErrCanNotConvertParamToRightType
Indique que la conversion du paramètre vers le type souhaité est impossible.
Definition CaseTable.h:52
@ ErrBadRange
Indique qu'un indice d'un élément n'est pas valide.
Definition CaseTable.h:50
@ ErrNotGreaterThanPrevious
Indique que le paramètre n'est pas supérieur au précédent.
Definition CaseTable.h:56
@ ErrCanNotConvertValueToRightType
Indique que la conversion de la valeur vers le type souhaité est impossible.
Definition CaseTable.h:54
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
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 -*-