14#include "arcane/utils/ParameterList.h"
15#include "arcane/utils/StringDictionary.h"
16#include "arcane/utils/String.h"
17#include "arcane/utils/Array.h"
18#include "arcane/utils/FatalErrorException.h"
19#include "arcane/utils/Ref.h"
21#include "arcane/utils/internal/ParameterOption.h"
22#include "arcane/utils/internal/ParameterListWithCaseOption.h"
54 return (v1.name == v2.name && v1.value == v2.value);
61 : m_parameter_option(
makeRef(new ParameterOptionElementsCollection()))
69 if (
const auto value = m_parameter_option->value(ParameterOptionAddr(key.
view().
subView(2))))
73 String x = m_parameters_dictionary.
find(key);
77 void addParameter(
const String& name,
const String& value)
83 if (name.startsWith(
"//")) {
84 m_parameters_option_list.add({ name, value });
85 m_parameter_option->addParameter(m_parameters_option_list[m_parameters_option_list.size() - 1].name, m_parameters_option_list[m_parameters_option_list.size() - 1].value);
89 m_parameters_dictionary.add(name, value);
90 m_parameters_list.add({ name, value });
91 m_parameter_option->addParameter(m_parameters_list[m_parameters_list.size() - 1].name, m_parameters_list[m_parameters_list.size() - 1].value);
94 void setParameter(
const String& name,
const String& value)
100 if (name.startsWith(
"//")) {
101 ARCANE_FATAL(
"Set parameter not supported for ParameterOptions.");
104 m_parameters_dictionary.add(name, value);
106 auto comparer = [=](
const NameValuePair& nv) {
return nv.name == name; };
107 auto new_end = std::remove_if(m_parameters_list.begin(), m_parameters_list.end(), comparer);
108 m_parameters_list.resize(new_end - m_parameters_list.begin());
111 void removeParameter(
const String& name,
const String& value)
116 if (name.startsWith(
"//")) {
117 ARCANE_FATAL(
"Remove parameter not supported for ParameterOptions.");
122 String x = m_parameters_dictionary.find(name);
123 bool need_fill =
false;
125 m_parameters_dictionary.remove(name);
131 auto new_end = std::remove(m_parameters_list.begin(), m_parameters_list.end(), ref_value);
132 m_parameters_list.resize(new_end - m_parameters_list.begin());
134 _fillDictionaryWithValueInList(name);
138 m_parameters_dictionary.fill(param_names, values);
139 for (
const auto& [name, value] : m_parameters_option_list) {
140 param_names.add(name);
142 std::cout <<
"FILL name='" << name <<
"' value='" << value <<
"'\n";
146 ParameterOptionElementsCollection* getParameterOption()
const
148 return m_parameter_option.get();
153 void _fillDictionaryWithValueInList(
const String& name)
155 for (
auto& nv : m_parameters_list)
157 m_parameters_dictionary.add(nv.name, nv.value);
162 StringDictionary m_parameters_dictionary;
163 UniqueArray<NameValuePair> m_parameters_list;
164 UniqueArray<NameValuePair> m_parameters_option_list;
165 Ref<ParameterOptionElementsCollection> m_parameter_option;
171ParameterListWithCaseOption::
172ParameterListWithCaseOption()
180ParameterListWithCaseOption::
181ParameterListWithCaseOption(
const ParameterListWithCaseOption& rhs)
182: m_p(new Impl(*rhs.m_p))
189ParameterListWithCaseOption::
190~ParameterListWithCaseOption()
198String ParameterListWithCaseOption::
199getParameterOrNull(
const String& param_name)
const
201 return m_p->getParameter(param_name);
207bool ParameterListWithCaseOption::
208addParameterLine(
const String& line)
210 Span<const Byte> bytes = line.bytes();
214 Byte cnext = ((i + 1) <
len) ? bytes[i + 1] :
'\0';
216 m_p->addParameter(line.substring(0, i), line.substring(i + 1));
219 if (c ==
'+' && cnext ==
'=') {
220 m_p->addParameter(line.substring(0, i), line.substring(i + 2));
223 if (c ==
':' && cnext ==
'=') {
224 m_p->setParameter(line.substring(0, i), line.substring(i + 2));
227 if (c ==
'-' && cnext ==
'=') {
228 m_p->removeParameter(line.substring(0, i), line.substring(i + 2));
238ParameterCaseOption ParameterListWithCaseOption::
239getParameterCaseOption(
const String& language)
const
241 return { m_p->getParameterOption(), language };
247void ParameterListWithCaseOption::
248addParameters(
const ParameterList& parameters)
253 parameters.fillParameters(names, values);
255 for (
Int32 i = 0; i < size; ++i)
256 m_p->addParameter(names[i], values[i]);
#define ARCANE_FATAL(...)
Macro throwing a FatalErrorException.
Integer count() const
Number of elements in the collection.
String find(const String &key, bool throw_exception=false) const
Returns the value associated with key.
StringView subView(Int64 pos) const
Substring starting at position pos.
Unicode character string.
bool startsWith(const String &s) const
Indicates if the string starts with the characters of s.
StringView view() const
Returns a view of the current string.
Integer len(const char *s)
Returns the length of the string s.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
std::int64_t Int64
Signed integer type of 64 bits.
List< String > StringList
Unicode string list.
unsigned char Byte
Type of a byte.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Creates a reference on a pointer.
std::int32_t Int32
Signed integer type of 32 bits.