20#include <xrpl/basics/BasicConfig.h> 
   21#include <xrpl/basics/StringUtilities.h> 
   23#include <boost/regex/v5/regbase.hpp> 
   24#include <boost/regex/v5/regex.hpp> 
   25#include <boost/regex/v5/regex_fwd.hpp> 
   26#include <boost/regex/v5/regex_match.hpp> 
   50    static boost::regex 
const re1(
 
   53        "([a-zA-Z][_a-zA-Z0-9]*)"   
   60        boost::regex_constants::optimize);
 
   63    for (
auto line : 
lines)
 
   65        auto remove_comment = [](
std::string& val) -> 
bool {
 
   66            bool removed_trailing = 
false;
 
   67            auto comment = val.
find(
'#');
 
   68            while (comment != std::string::npos)
 
   77                else if (val.at(comment - 1) == 
'\\')
 
   81                    val.erase(comment - 1, 1);
 
   88                    removed_trailing = 
true;
 
   92                comment = val.find(
'#', comment);
 
   94            return removed_trailing;
 
   97        if (remove_comment(line) && !line.empty())
 
  104        if (boost::regex_match(line, 
match, re1))
 
 
  122    for (
auto const& [k, v] : section.
lookup_)
 
  123        os << k << 
"=" << v << 
"\n";
 
 
  132    return map_.contains(name);
 
 
  138    return map_.emplace(name, name).first->second;
 
 
  145    auto const iter = 
map_.find(name);
 
  146    if (iter == 
map_.end())
 
 
  157    auto const result = 
map_.emplace(
 
  161    result.first->second.
set(key, value);
 
 
  187    for (
auto const& entry : ifs)
 
  189        auto const result = 
map_.emplace(
 
  193        result.first->second.append(entry.second);
 
 
  200    for (
auto const& [k, v] : c.
map_)
 
  201        ss << 
"[" << k << 
"]\n" << v;
 
 
Holds unparsed configuration information.
 
bool exists(std::string const &name) const
Returns true if a section with the given name exists.
 
void deprecatedClearSection(std::string const §ion)
Remove all the key/value pairs from the section.
 
Section & section(std::string const &name)
Returns the section with the given name.
 
void build(IniFileSections const &ifs)
 
std::unordered_map< std::string, Section > map_
 
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.
 
void legacy(std::string const §ion, std::string value)
Set a value that is not a key/value pair.
 
Holds a collection of configuration values.
 
std::string const & name() const
Returns the name of this section.
 
void set(std::string const &key, std::string const &value)
Set a key/value pair.
 
std::vector< std::string > lines_
 
std::vector< std::string > const & lines() const
Returns all the lines in the section.
 
void legacy(std::string value)
Set the legacy value for this section.
 
bool exists(std::string const &name) const
Returns true if a key with the given name exists.
 
bool had_trailing_comments_
 
void append(std::vector< std::string > const &lines)
Append a set of lines to this section.
 
Section(std::string const &name="")
Create an empty section.
 
std::unordered_map< std::string, std::string > lookup_
 
std::vector< std::string > values_
 
T insert_or_assign(T... args)
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
 
std::string trim_whitespace(std::string str)
 
std::ostream & operator<<(std::ostream &out, base_uint< Bits, Tag > const &u)