12#ifndef ARCANE_CASEOPTIONSERVICE_H
13#define ARCANE_CASEOPTIONSERVICE_H
17#include "arcane/utils/ITraceMng.h"
18#include "arcane/utils/Functor.h"
20#include "arcane/CaseOptions.h"
21#include "arcane/IServiceMng.h"
22#include "arcane/ISubDomain.h"
23#include "arcane/ServiceUtils.h"
24#include "arcane/ArcaneException.h"
25#include "arcane/IFactoryService.h"
26#include "arcane/IServiceFactory.h"
27#include "arcane/StringDictionary.h"
28#include "arcane/CaseOptionServiceImpl.h"
48template<
typename InterfaceType>
63 InterfaceType* s = sr.
get();
64 m_services_reference[index] = sr;
65 m_services[index] = s;
66 return (s !=
nullptr);
83 m_services.resize(asize,
nullptr);
84 m_services_reference.resize(asize);
90 return m_services.size();
93 InterfaceType* child(
Integer i)
const
98 Ref<InterfaceType> childRef(
Integer i)
const
100 return m_services_reference[i];
107 m_services_reference.clear();
113 UniqueArray<InterfaceType*> m_services;
114 UniqueArray<Ref<InterfaceType>> m_services_reference;
128class ARCANE_CORE_EXPORT CaseOptionService
137 virtual ~CaseOptionService() =
default;
141 CaseOptionService(
const CaseOptionService&) =
delete;
142 const CaseOptionService& operator=(
const CaseOptionService&) =
delete;
146 ARCANE_DEPRECATED_REASON(
"Y2022: Use toICaseOptions() instead")
149 ARCANE_DEPRECATED_REASON(
"Y2022: Use toICaseOptions() instead")
150 operator const CaseOptions& ()
const {
return *_impl(); }
154 const ICaseOptions* toICaseOptions() {
return _impl(); }
158 String rootTagName()
const {
return m_impl->rootTagName(); }
159 String name()
const {
return m_impl->name(); }
160 String serviceName()
const {
return m_impl->serviceName(); }
161 bool isOptional()
const {
return m_impl->isOptional(); }
162 bool isPresent()
const {
return m_impl->isPresent(); }
163 void addAlternativeNodeName(
const String& lang,
const String& name)
165 m_impl->addAlternativeNodeName(lang,name);
169 m_impl->getAvailableNames(names);
184 m_impl->setDefaultValue(def_value);
189 m_impl->addDefaultValue(category,value);
199 void setMeshName(
const String& mesh_name);
213 const CaseOptionServiceImpl* _impl()
const {
return m_impl.get(); }
217 ReferenceCounter<CaseOptionServiceImpl> m_impl;
223template<
class InterfaceType>
224class CaseOptionServiceT
225:
public CaseOptionService
229 : CaseOptionService(cob,allow_null,is_optional)
231 _impl()->setContainer(&m_container);
233 ~CaseOptionServiceT() =
default;
235 InterfaceType* operator()()
const {
return _instance(); }
236 InterfaceType* instance()
const {
return _instance(); }
241 InterfaceType* _instance()
const
243 if (m_container.nbElem()==1)
244 return m_container.child(0);
249 if (m_container.nbElem()==1)
250 return m_container.childRef(0);
261class ARCANE_CORE_EXPORT CaseOptionMultiService
268 virtual ~CaseOptionMultiService() =
default;
269 CaseOptionMultiService(
const CaseOptionMultiService&) =
delete;
270 const CaseOptionMultiService& operator=(
const CaseOptionMultiService&) =
delete;
272 XmlNode rootElement()
const {
return m_impl->toCaseOptions()->configList()->rootElement(); }
273 String rootTagName()
const {
return m_impl->rootTagName(); }
274 String name()
const {
return m_impl->name(); }
278 m_impl->getAvailableNames(names);
283 return m_impl->serviceName(index);
285 void addAlternativeNodeName(
const String& lang,
const String& name)
287 m_impl->addAlternativeNodeName(lang,name);
294 void setMeshName(
const String& mesh_name);
301 String meshName()
const;
305 CaseOptionMultiServiceImpl* _impl() {
return m_impl.get(); }
306 const CaseOptionMultiServiceImpl* _impl()
const {
return m_impl.get(); }
310 ReferenceCounter<CaseOptionMultiServiceImpl> m_impl;
319template<
typename InterfaceType>
320class CaseOptionMultiServiceT
321:
public CaseOptionMultiService
324 typedef CaseOptionMultiServiceT<InterfaceType> ThatClass;
327 : CaseOptionMultiService(cob,allow_null)
328 , m_notify_functor(
this,&ThatClass::_notify)
330 _impl()->setContainer(&m_container);
331 _impl()->_setNotifyAllocateFunctor(&m_notify_functor);
334 CaseOptionMultiServiceT<InterfaceType>& operator()()
338 const CaseOptionMultiServiceT<InterfaceType>& operator()()
const
346 this->setArray(m_container.view());
Vue modifiable d'un tableau d'un type T.
void getAvailableNames(StringArray &names) const
Retourne dans names les noms d'implémentations valides pour ce service.
String serviceName(Integer index) const
Nom du n-ième service.
Implémentation du conteneur pour un service de type InterfaceType.
void allocate(Integer asize) override
Alloue un tableau pour size éléments.
Integer nbElem() const override
Retourne le nombre d'éléments du tableau.
void removeInstances()
Supprime les instances des services.
void addDefaultValue(const String &category, const String &value)
Ajoute la valeur par défaut value à la catégorie category.
void setDefaultValue(const String &def_value)
Positionne la valeur par défaut du nom du service.
Interface d'un conteneur d'instances de service.
Référence à une instance.
InstanceType * get() const
Instance associée ou nullptr si aucune.
Informations pour créer un service.
Chaîne de caractères unicode.
constexpr ArrayView() noexcept
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Array< String > StringArray
Tableau dynamique à une dimension de chaînes de caractères.
Int32 Integer
Type représentant un entier.