20 #include <ripple/basics/BasicConfig.h>
21 #include <ripple/basics/StringUtilities.h>
22 #include <boost/regex.hpp>
35 auto const result = cont().emplace (key, value);
37 result.first->second = value;
44 static boost::regex
const re1 (
47 "([a-zA-Z][_a-zA-Z0-9]*)"
53 , boost::regex_constants::optimize
57 for (
auto line :
lines)
61 bool removed_trailing =
false;
62 auto comment = val.
find(
'#');
63 while(comment != std::string::npos)
72 else if (val.at(comment-1) ==
'\\')
76 val.erase(comment-1,1);
83 removed_trailing =
true;
87 comment = val.find(
'#', comment);
89 return removed_trailing;
92 if (remove_comment(line) && !line.empty())
99 if (boost::regex_match (line, match, re1))
100 set (match[1], match[2]);
111 return cont().find (
name) != cont().end();
117 auto const iter = cont().find (
name);
118 if (iter == cont().end())
120 return {iter->second,
true};
126 for (
auto const& [k, v] : section.cont())
127 os << k <<
"=" << v <<
"\n";
136 return map_.find(name) !=
map_.end();
149 auto const iter =
map_.find (name);
150 if (iter ==
map_.end())
159 auto const result =
map_.emplace (std::piecewise_construct,
161 result.first->second.set (key, value);
187 for (
auto const& entry : ifs)
189 auto const result =
map_.emplace (std::piecewise_construct,
191 result.first->second.append (entry.second);
198 for (
auto const& [k, v] : c.
map_)
199 ss <<
"[" << k <<
"]\n" << v;
Holds a collection of configuration values.
std::vector< std::string > values_
void legacy(std::string value)
Set the legacy value for this section.
Section(std::string const &name="")
Create an empty section.
bool exists(std::string const &name) const
Returns true if a key with the given name exists.
std::string trim_whitespace(std::string str)
std::ostream & operator<<(std::ostream &os, TOffer< TIn, TOut > const &offer)
void append(std::vector< std::string > const &lines)
Append a set of lines to this section.
std::string const & name() const
Returns the name of this section.
void deprecatedClearSection(std::string const §ion)
Remove all the key/value pairs from the section.
void build(IniFileSections const &ifs)
void legacy(std::string const §ion, std::string value)
Set a value that is not a key/value pair.
std::vector< std::string > const & lines() const
Returns all the lines in the section.
bool had_trailing_comments_
void overwrite(std::string const §ion, std::string const &key, std::string const &value)
Overwrite a key/value pair with a command line argument If the section does not exist it is created.
std::pair< std::string, bool > find(std::string const &name) const
Retrieve a key/value pair.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
void set(std::string const &key, std::string const &value)
Set a key/value pair.
std::vector< std::string > lines_
std::map< std::string, Section, boost::beast::iless > map_
Holds unparsed configuration information.
bool exists(std::string const &name) const
Returns true if a section with the given name exists.
Section & section(std::string const &name)
Returns the section with the given name.