14#include "arcane/utils/ArcanePrecomp.h"
15#include "arcane/utils/TraceAccessor.h"
16#include "arcane/utils/ITraceMng.h"
17#include "arcane/utils/String.h"
18#include "arcane/utils/ValueConvert.h"
19#include "arcane/utils/FatalErrorException.h"
20#include "arcane/utils/TraceInfo.h"
21#include "arcane/utils/ScopedPtr.h"
22#include "arcane/utils/OStringStream.h"
24#include "arcane/core/Configuration.h"
25#include "arcane/core/XmlNode.h"
26#include "arcane/core/XmlNodeList.h"
71class ConfigurationSection
77 : m_configuration(configuration)
78 , m_base_name(base_name)
81 virtual ~ConfigurationSection() {}
88 virtual bool value(
const String& name,
bool default_value)
const;
90 virtual String value(
const String& name,
const char* default_value)
const;
94 return value(name, default_value);
98 return value(name, default_value);
102 return value(name, default_value);
104 virtual Real valueAsReal(
const String& name,
Real default_value)
const
106 return value(name, default_value);
108 virtual bool valueAsBool(
const String& name,
bool default_value)
const
110 return value(name, default_value);
114 return value(name, default_value);
134 , m_priority(priority)
136 const String& value()
const {
return m_value; }
137 Integer priority()
const {
return m_priority; }
145 typedef std::map<String, ConfigValue> KeyValueMap;
163 void dump()
const override;
164 void dump(std::ostream& o)
const override;
168 template <
typename T> T getValue(
const String& base_name,
const String& name, T default_value)
const
171 KeyValueMap::const_iterator i;
172 if (base_name.
null())
173 i = m_values.find(name);
175 i = m_values.find(base_name +
"." + name);
177 if (i == m_values.end())
178 return default_value;
180 String value = i->second.value();
181 if (builtInGetValue(v, value))
182 throw FatalErrorException(A_FUNCINFO, String::format(
"Can not convert '{0}' to type '{1}'", value, _typeName((T*)0)));
189 static const char* _typeName(Int32*) {
return "Int32"; }
190 static const char* _typeName(
Int64*) {
return "Int64"; }
191 static const char* _typeName(
Real*) {
return "Real"; }
192 static const char* _typeName(
bool*) {
return "bool"; }
193 static const char* _typeName(String*) {
return "String"; }
195 void _checkAdd(
const String& name,
const String& value,
Integer priority)
197 KeyValueMap::iterator i = m_values.find(name);
199 if (i == m_values.end()) {
201 m_values.insert(std::make_pair(name,
ConfigValue(value, priority)));
204 Integer orig_priority = i->second.priority();
206 if (priority < orig_priority) {
215 ConfigurationMng* m_configuration_mng;
216 KeyValueMap m_values;
217 ScopedPtrT<IConfigurationSection> m_main_section;
226Int32 ConfigurationSection::
227value(
const String& name,
Int32 default_value)
const
229 return m_configuration->getValue(m_base_name, name, default_value);
232Int64 ConfigurationSection::
233value(
const String& name,
Int64 default_value)
const
235 return m_configuration->getValue(m_base_name, name, default_value);
238Real ConfigurationSection::
239value(
const String& name,
Real default_value)
const
241 return m_configuration->getValue(m_base_name, name, default_value);
244bool ConfigurationSection::
245value(
const String& name,
bool default_value)
const
247 return m_configuration->getValue(m_base_name, name, default_value);
250String ConfigurationSection::
251value(
const String& name,
const String& default_value)
const
253 return m_configuration->getValue(m_base_name, name, default_value);
256String ConfigurationSection::
257value(
const String& name,
const char* default_value)
const
259 return m_configuration->getValue(m_base_name, name, String(default_value));
271, m_configuration_mng(cm)
282 Configuration* cf =
new Configuration(m_configuration_mng,
traceMng());
284 for (
auto& i : m_values) {
285 cf->m_values.insert(std::make_pair(i.first, i.second));
299 info() << ostr.str();
306dump(std::ostream& o)
const
308 o <<
"Configuration:\n";
309 for (
auto& i : m_values) {
311 String s2 = i.second.value();
312 o <<
" name=" << s1 <<
" value=" << s2 <<
" (" << i.second.priority() <<
")\n";
323 for (
auto& i : cc->m_values) {
327 _checkAdd(s1, cv.value(), cv.priority());
339 _checkAdd(name, value, priority);
351, m_default_configuration(0)
353 m_default_configuration = _createConfiguration();
362 delete m_default_configuration;
369_createConfiguration()
371 return new Configuration(
this,
traceMng());
380 return m_default_configuration;
389 return _createConfiguration();
399arcaneCreateConfigurationMng(
ITraceMng* tm)
#define ARCANE_CHECK_POINTER(ptr)
Macro returning the pointer ptr if it is not null or throwing an exception if it is null.
virtual IConfiguration * defaultConfiguration() const
Default configuration.
virtual IConfiguration * createConfiguration()
Creates a new configuration.
void dump() const override
Displays the values of the configuration parameters via traceMng().
void merge(const IConfiguration *c) override
Merges this configuration with configuration c.
IConfigurationSection * createSection(const String &name) const override
Creates a configuration section.
IConfiguration * clone() const override
Clones this configuration.
IConfigurationSection * mainSection() const override
Main section.
void addValue(const String &name, const String &value, Integer priority) override
Adds a value to the configuration.
Exception when a fatal error has occurred.
Interface for a configuration section.
Interface for a configuration.
Output stream linked to a String.
Unicode character string.
bool null() const
Returns true if the string is null.
TraceAccessor(ITraceMng *m)
Constructs an accessor via the trace manager m.
TraceMessage info() const
Flow for an information message.
ITraceMng * traceMng() const
Trace manager.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
std::int64_t Int64
Signed integer type of 64 bits.
Int32 Integer
Type representing an integer.
double Real
Type representing a real number.
std::int32_t Int32
Signed integer type of 32 bits.