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"
40class CaseOptionBuildInfo;
41template<
typename T>
class CaseOptionServiceT;
48template<
typename InterfaceType>
62 Ref<InterfaceType> sr = true_factory->createServiceReference(sbi);
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;
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>
235 InterfaceType* operator()()
const {
return _instance(); }
236 InterfaceType* instance()
const {
return _instance(); }
237 Ref<InterfaceType> instanceRef()
const {
return _instanceRef(); }
241 InterfaceType* _instance()
const
243 if (m_container.
nbElem()==1)
244 return m_container.child(0);
247 Ref<InterfaceType> _instanceRef()
const
249 if (m_container.
nbElem()==1)
250 return m_container.childRef(0);
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>
328 , m_notify_functor(
this,&ThatClass::_notify)
331 _impl()->_setNotifyAllocateFunctor(&m_notify_functor);
346 this->setArray(m_container.view());
void setContainer(ICaseOptionServiceContainer *container)
Positionne le conteneur d'instances.
Option du jeu de données de type liste de services.
Classe de base d'une option service pouvant être présente plusieurs fois.
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 setContainer(ICaseOptionServiceContainer *container)
Positionne le conteneur d'instances.
Classe de base des options utilisant 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.
Informations pour créer un service.
Integer size() const
Nombre d'éléments du vecteur.
Vue modifiable d'un tableau d'un type T.
Classe de base des vecteurs 1D de données.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
void clear()
Supprime les éléments du tableau.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-