Arcane  v4.1.2.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
FieldProperty.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* FieldProperty.h (C) 2000-2026 */
9/* */
10/* Gestion des propriétés comme champ de classes. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_COMMON_INTERNAL_FIELDPROPERTY_H
13#define ARCCORE_COMMON_INTERNAL_FIELDPROPERTY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/common/Array.h"
18#include "arccore/base/internal/ConvertInternal.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
30{
31 public:
32
33 template <typename DataType>
34 class FieldProperty
35 {
36 public:
37
38 explicit FieldProperty(const DataType& default_value)
39 : m_value(default_value)
40 , m_default_value(default_value)
41 {}
42 FieldProperty()
43 : FieldProperty(DataType())
44 {}
45 FieldProperty& operator=(const DataType& v)
46 {
47 setValue(v);
48 return (*this);
49 }
50 explicit(false) operator DataType() const { return m_value; }
51
52 public:
53
54 void setValue(const DataType& v)
55 {
56 if (m_validator) {
57 DataType copy(v);
58 m_validator(copy);
59 m_value = copy;
60 }
61 else
62 m_value = v;
63 m_has_value = true;
64 }
65 DataType value() const { return m_value; }
66 bool isValueSet() const { return m_has_value; }
67 void setValidator(std::function<void(DataType&)>&& func) { m_validator = func; }
68
69 private:
70
71 DataType m_value;
72 DataType m_default_value;
73 bool m_has_value = false;
74 std::function<void(DataType&)> m_validator;
75 };
76
77 class Int32Value
78 {
79 public:
80
81 explicit Int32Value(Int32 v)
82 : value(v)
83 {}
84 explicit(false) operator Int32() const { return value; }
85
86 public:
87
88 Int32Value minValue(Int32 x) const
89 {
90 return Int32Value(std::max(value, x));
91 }
92 Int32Value maxValue(Int32 x) const
93 {
94 return Int32Value(std::min(value, x));
95 }
96
97 public:
98
99 Int32 value;
100 };
101
102 static Int32Value getInt32(const String& str_value, Int32 default_value)
103 {
104 Int32 v = default_value;
105 if (!str_value.null()) {
106 bool is_bad = Convert::Impl::StringViewToIntegral::getValue(v, str_value);
107 if (is_bad)
108 v = default_value;
109 }
110 return Int32Value(v);
111 }
112 static void checkSet(FieldProperty<bool>& p, const String& str_value)
113 {
114 if (p.isValueSet())
115 return;
116 if (str_value.null())
117 return;
118 bool v = false;
119 bool is_bad = Convert::Impl::StringViewToIntegral::getValue(v, str_value);
120 if (!is_bad)
121 p.setValue(v);
122 }
123 static void checkSet(FieldProperty<Int32>& p, const String& str_value)
124 {
125 if (p.isValueSet())
126 return;
127 if (str_value.null())
128 return;
129 Int32 v = 0;
130 bool is_bad = Convert::Impl::StringViewToIntegral::getValue(v, str_value);
131 if (!is_bad)
132 p.setValue(v);
133 }
134 static void checkSet(FieldProperty<StringList>& p, const String& str_value)
135 {
136 if (p.isValueSet())
137 return;
138 if (str_value.null())
139 return;
140 StringList s;
141 s.add(str_value);
142 p.setValue(s);
143 }
144 static void checkSet(FieldProperty<StringList>& p, const StringList& str_values)
145 {
146 if (p.isValueSet())
147 return;
148 p.setValue(str_values);
149 }
150 static void checkSet(FieldProperty<String>& p, const String& str_value)
151 {
152 if (p.isValueSet())
153 return;
154 if (str_value.null())
155 return;
156 p.setValue(str_value);
157 }
158
159 /*---------------------------------------------------------------------------*/
160 /*---------------------------------------------------------------------------*/
161
163 {
164 private:
165
166 class NameValuePair
167 {
168 public:
169
170 NameValuePair(const String& n, const String& v)
171 : name(n)
172 , value(v)
173 {}
174 String name;
175 String value;
176 };
177
178 public:
179
192 String getValue(const UniqueArray<String>& env_values, const String& param_name,
193 const String& default_value)
194 {
195 if (!param_name.null()) {
196 String v = _searchParam(param_name);
197 if (!v.null())
198 return v;
199 }
200 for (const auto& x : env_values) {
202 if (!ev.null())
203 return ev;
204 }
205 return default_value;
206 }
207 void add(const String& name, const String& value)
208 {
209 m_values.add(NameValuePair(name, value));
210 }
211
212 private:
213
215
216 private:
217
218 String _searchParam(const String& param_name)
219 {
220 String v;
221 // Une option peut être présente plusieurs fois. Prend la dernière.
222 for (const auto& x : m_values) {
223 if (x.name == param_name)
224 v = x.value;
225 }
226 return v;
227 }
228 };
229};
230
231/*---------------------------------------------------------------------------*/
232/*---------------------------------------------------------------------------*/
233
234} // namespace Arcane
235
236/*---------------------------------------------------------------------------*/
237/*---------------------------------------------------------------------------*/
238
239#endif
String getValue(const UniqueArray< String > &env_values, const String &param_name, const String &default_value)
Récupère la valeur d'une option.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
Definition String.cc:305
Vecteur 1D de données avec sémantique par valeur (style STL).
ARCCORE_BASE_EXPORT String getEnvironmentVariable(const String &name)
Variable d'environnement du nom name.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
List< String > StringList
Tableau de chaînes de caractères unicode.
Definition UtilsTypes.h:509
std::int32_t Int32
Type entier signé sur 32 bits.