Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
AxlOptionsBuilder.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/* AxlOptionsBuilder.h (C) 2000-2023 */
9/* */
10/* Classes pour créer dynamiquement des options du jeu de données. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_AXLOPTIONSBUILDER_H
13#define ARCANE_CORE_AXLOPTIONSBUILDER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/String.h"
18
20
21#include <memory>
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane::AxlOptionsBuilder
27{
28class OneOption;
29class OneOptionImpl;
30class DocumentXmlWriter;
31class DocumentJSONWriter;
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35/*!
36 * \brief Liste d'options du jeu de données.
37 */
38class ARCANE_CORE_EXPORT OptionList
39{
40 friend OneOption;
41 friend OneOptionImpl;
42 friend DocumentXmlWriter;
43 friend DocumentJSONWriter;
44
45 public:
46
47 //! Construit un jeu d'options vide.
48 OptionList();
49 //! Construit une liste d'options
50 explicit OptionList(const std::initializer_list<OneOption>& options);
51
52 public:
53
54 OptionList& add(const String& name, const OptionList& option);
55 OptionList& add(const OneOption& opt);
56 OptionList& add(const std::initializer_list<OneOption>& options);
57
58 public:
59
60 OptionList clone() const;
61
62 private:
63
64 std::shared_ptr<OneOptionImpl> m_p;
65};
66
67/*---------------------------------------------------------------------------*/
68/*---------------------------------------------------------------------------*/
69/*!
70 * \brief Classe de base d'une option dynamique.
71 */
72class ARCANE_CORE_EXPORT OneOption
73{
74 friend class OptionList;
75 friend class OneOptionImpl;
76 friend DocumentXmlWriter;
77 friend DocumentJSONWriter;
78
79 protected:
80
81 enum class Type
82 {
83 CO_Simple,
84 CO_Enumeration,
85 CO_Extended,
86 CO_Complex,
87 CO_ServiceInstance
88 };
89
90 public:
91
92 OneOption() = default;
93
94 protected:
95
96 OneOption(Type type, const String& name, const String& value)
97 : m_type(type)
98 , m_name(name)
99 , m_value(value)
100 {}
101 OneOption(Type type, const String& name, const OptionList& option);
102
103 protected:
104
105 Type m_type = Type::CO_Simple;
106 String m_name; //! Nom de l'option
107 String m_value; //! Valeur de l'option (si option CO_Simple)
108 String m_service_name; //!< Nom du service (si option de type CO_ServiceInstance)
109 String m_function_name; //<! Nom de la fonction (ICaseFunction)
110 std::shared_ptr<OneOptionImpl> m_sub_option;
111};
112
113/*---------------------------------------------------------------------------*/
114/*---------------------------------------------------------------------------*/
115/*!
116 * \brief Option 'Simple' du jeu de données.
117 */
118class ARCANE_CORE_EXPORT Simple
119: public OneOption
120{
121 public:
122
123 Simple(const String& name, Int32 value)
124 : OneOption(Type::CO_Simple, name, String::fromNumber(value))
125 {}
126
127 Simple(const String& name, Int64 value)
128 : OneOption(Type::CO_Simple, name, String::fromNumber(value))
129 {
130 }
131
132 Simple(const String& name, Real value)
133 : OneOption(Type::CO_Simple, name, String::fromNumber(value))
134 {
135 }
136
137 Simple(const String& name, const String& value)
138 : OneOption(Type::CO_Simple, name, value)
139 {
140 }
141
142 public:
143
144 Simple& addFunction(const String& func_name)
145 {
146 m_function_name = func_name;
147 return (*this);
148 }
149};
150
151/*---------------------------------------------------------------------------*/
152/*---------------------------------------------------------------------------*/
153/*!
154 * \brief Option 'Enumeration' du jeu de données.
155 */
156class ARCANE_CORE_EXPORT Enumeration
157: public OneOption
158{
159 public:
160
161 Enumeration(const String& name, const String& value)
162 : OneOption(Type::CO_Enumeration, name, value)
163 {
164 }
165};
166
167/*---------------------------------------------------------------------------*/
168/*---------------------------------------------------------------------------*/
169/*!
170 * \brief Option 'Extended' du jeu de données.
171 */
172class ARCANE_CORE_EXPORT Extended
173: public OneOption
174{
175 public:
176
177 Extended(const String& name, const String& value)
178 : OneOption(Type::CO_Extended, name, value)
179 {
180 }
181};
182
183/*---------------------------------------------------------------------------*/
184/*---------------------------------------------------------------------------*/
185/*!
186 * \brief Option 'Complex' du jeu de données.
187 */
188class ARCANE_CORE_EXPORT Complex
189: public OneOption
190{
191 public:
192
193 Complex(const String& name, const std::initializer_list<OneOption>& options);
194 Complex(const String& name, const OptionList& option);
195};
196
197/*---------------------------------------------------------------------------*/
198/*---------------------------------------------------------------------------*/
199/*!
200 * \brief Option 'ServiceInstance' du jeu de données.
201 */
202class ARCANE_CORE_EXPORT ServiceInstance
203: public OneOption
204{
205 public:
206
207 ServiceInstance(const String& option_name, const String& service_name,
208 const std::initializer_list<OneOption>& options);
209 ServiceInstance(const String& option_name, const String& service_name,
210 const OptionList& options);
211 ServiceInstance(const String& option_name, const String& service_name);
212};
213
214/*---------------------------------------------------------------------------*/
215/*---------------------------------------------------------------------------*/
216
217/*!
218* \brief Option 'ServiceInstance' du jeu de données.
219 */
220class ARCANE_CORE_EXPORT Document
221{
222 friend DocumentXmlWriter;
223 friend DocumentJSONWriter;
224
225 public:
226
227 Document(const String& lang, const OptionList& options)
228 : m_language(lang)
229 , m_options(options)
230 {}
231
232 public:
233
234 const String& language() const { return m_language; }
235
236 private:
237
238 String m_language;
239 OptionList m_options;
240};
241
242/*---------------------------------------------------------------------------*/
243/*---------------------------------------------------------------------------*/
244
245} // namespace Arcane::AxlOptionsBuilder
246
247/*---------------------------------------------------------------------------*/
248/*---------------------------------------------------------------------------*/
249
250#endif
Déclarations des types généraux de Arcane.
Option 'Complex' du jeu de données.
Écrivain au format JSON pour un jeu de données.
Écrivain au format XML pour un jeu de données.
Option 'ServiceInstance' du jeu de données.
Option 'Enumeration' du jeu de données.
Option 'Extended' du jeu de données.
Classe de base d'une option dynamique.
String m_service_name
Valeur de l'option (si option CO_Simple)
Liste d'options du jeu de données.
Option 'ServiceInstance' du jeu de données.
Option 'Simple' du jeu de données.
Chaîne de caractères unicode.