Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
CaseOptionServiceImpl.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/* CaseOptionServiceImpl.h (C) 2000-2022 */
9/* */
10/* Implémentation d'une option du jeu de données utilisant un service. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CASEOPTIONSERVICEIMPL_H
13#define ARCANE_CASEOPTIONSERVICEIMPL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Functor.h"
18
19#include "arcane/CaseOptions.h"
20#include "arcane/CaseOptionsMulti.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31class IService;
32class CaseOptionBuildInfo;
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36/*!
37 * \brief Interface d'un conteneur d'instances de service.
38 * \todo: ajouter compteur de référence
39 */
40class ARCANE_CORE_EXPORT ICaseOptionServiceContainer
41{
42 public:
43 virtual ~ICaseOptionServiceContainer() = default;
44 public:
45 virtual bool tryCreateService(Integer index,Internal::IServiceFactory2* factory,const ServiceBuildInfoBase& sbi) =0;
46 virtual bool hasInterfaceImplemented(Internal::IServiceFactory2*) const =0;
47 //! Alloue un tableau pour \a size éléments
48 virtual void allocate(Integer size) =0;
49 //! Retourne le nombre d'éléments du tableau.
50 virtual Integer nbElem() const =0;
51};
52
53/*---------------------------------------------------------------------------*/
54/*---------------------------------------------------------------------------*/
55/*!
56 * \internal
57 * \ingroup CaseOption
58 * \brief Classe de base de l'implémentation des options utilisant des services.
59 *
60 * Cette classe est interne à Arcane. La classe à utiliser est 'CaseOptionService'.
61 */
62class ARCANE_CORE_EXPORT CaseOptionServiceImpl
63: public CaseOptions
64{
65 public:
66
67 CaseOptionServiceImpl(const CaseOptionBuildInfo& cob,bool allow_null,bool is_optional);
68
69 public:
70
71 void read(eCaseOptionReadPhase phase) override;
72 String serviceName() const { return m_service_name; }
73 bool isOptional() const { return m_is_optional; }
74
75 //! Retourne dans \a names les noms d'implémentations valides pour ce service
76 virtual void getAvailableNames(StringArray& names) const;
77 void visit(ICaseDocumentVisitor* visitor) const override;
78
79 void setDefaultValue(const String& def_value);
80 void addDefaultValue(const String& category,const String& value);
81
82 /*!
83 * \brief Positionne le conteneur d'instances.
84 *
85 * \a container reste la propriété de l'appelant qui doit gérer
86 * sa durée de vie.
87 */
88 void setContainer(ICaseOptionServiceContainer* container);
89
90 void setMeshName(const String& mesh_name) { m_mesh_name = mesh_name; }
91 String meshName() const { return m_mesh_name; }
92
93 protected:
94
95 virtual void print(const String& lang,std::ostream& o) const;
96
97 protected:
98
99 String _defaultValue() const { return m_default_value; }
100
101 private:
102
103 String m_name;
104 String m_default_value;
105 String m_service_name;
106 String m_mesh_name;
107 XmlNode m_element; //!< Element de l'option
108 bool m_allow_null;
109 bool m_is_optional;
110 bool m_is_override_default;
111 //! Liste des valeurs par défaut par catégorie.
112 StringDictionary m_default_values;
113 ICaseOptionServiceContainer* m_container;
114
115 private:
116
117 void _readPhase1();
118};
119
120/*---------------------------------------------------------------------------*/
121/*---------------------------------------------------------------------------*/
122/*!
123 * \internal
124 * \brief Classe de base d'une option service pouvant être présente plusieurs fois.
125 *
126 * Il faut appeler setContainer() pour positionner un conteneur
127 * avant d'utiliser cette classe.
128 */
129class ARCANE_CORE_EXPORT CaseOptionMultiServiceImpl
130: public CaseOptionsMulti
131{
132 public:
133
134 CaseOptionMultiServiceImpl(const CaseOptionBuildInfo& cob,bool allow_null);
136
137 public:
138
139 //! Retourne dans \a names les noms d'implémentations valides pour ce service
140 void getAvailableNames(StringArray& names) const;
141 //! Nom du n-ième service
142 String serviceName(Integer index) const
143 {
144 return m_services_name[index];
145 }
146
147 void multiAllocate(const XmlNodeList&) override;
148 void visit(ICaseDocumentVisitor* visitor) const override;
149 /*!
150 * \brief Positionne le conteneur d'instances.
151 *
152 * \a container reste la propriété de l'appelant qui doit gérer
153 * sa durée de vie.
154 */
155 void setContainer(ICaseOptionServiceContainer* container);
156
157 void setMeshName(const String& mesh_name) { m_mesh_name = mesh_name; }
158 String meshName() const { return m_mesh_name; }
159
160 public:
161
162 void _setNotifyAllocateFunctor(IFunctor* f)
163 {
164 m_notify_functor = f;
165 }
166
167 protected:
168
169 String _defaultValue() const { return m_default_value; }
170
171 protected:
172
173 bool m_allow_null;
174 String m_default_value;
175 String m_mesh_name;
176 IFunctor* m_notify_functor;
177 ICaseOptionServiceContainer* m_container;
178 //! Liste des options allouées qu'il faudra supprimer.
180 //! Noms du service pour chaque occurence
182};
183
184/*---------------------------------------------------------------------------*/
185/*---------------------------------------------------------------------------*/
186
187} // End namespace Arcane
188
189/*---------------------------------------------------------------------------*/
190/*---------------------------------------------------------------------------*/
191
192#endif
String serviceName(Integer index) const
Nom du n-ième service.
UniqueArray< String > m_services_name
Noms du service pour chaque occurence.
UniqueArray< ReferenceCounter< ICaseOptions > > m_allocated_options
Liste des options allouées qu'il faudra supprimer.
Interface du visiteur pour une option du jeu de données.
Interface d'un conteneur d'instances de service.
virtual void allocate(Integer size)=0
Alloue un tableau pour size éléments.
virtual Integer nbElem() const =0
Retourne le nombre d'éléments du tableau.
Informations pour créer un service.
Liste de noeuds d'un arbre DOM.
Definition XmlNodeList.h:33
Noeud d'un arbre DOM.
Definition XmlNode.h:51
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 -*-
eCaseOptionReadPhase
Phases de la lecture.