syncevolution/src/syncevo/HashConfigNode.h
Patrick Ohly e88bfa6214 C++: automatically determine iterator types
Having to specify the type of an iterator is annoying and does not
really add clarity to the code. With C++11 we can use "auto"
instead and in some cases remove helper typedefs.

Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
2020-12-05 21:28:08 +01:00

57 lines
1.7 KiB
C++

/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
*/
#ifndef INCL_EVOLUTION_HASH_CONFIG_NODE
# define INCL_EVOLUTION_HASH_CONFIG_NODE
#include <syncevo/ConfigNode.h>
#include <string>
#include <map>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
/**
* Implements a ConfigNode with an in-memory hash table.
*/
class HashConfigNode : public ConfigNode {
std::map<std::string, std::string> m_props;
const std::string m_name;
public:
/**
* @param name a string for debugging and error reporting
*/
HashConfigNode(const std::string &name = "hash config node") : m_name(name) {}
/* keep underlying methods visible; our own setProperty() would hide them */
using ConfigNode::setProperty;
virtual string getName() const { return m_name; }
virtual void flush() {}
virtual string readProperty(const string &property) const {
auto it = m_props.find(property);
if (it == m_props.end()) {
return "";
} else {
return it->second;
}
}
virtual void setProperty(const string &property,
const string &value,
const string &comment = "",
const string *defValue = nullptr) { m_props[property] = value; }
virtual void readProperties(std::map<std::string, std::string> &props) const { props = m_props; }
virtual void writeProperties(const PropsType &props) { m_props.insert(props.begin(), props.end()); }
virtual void removeProperty(const std::string &property) { m_props.erase(property); }
virtual bool exists() const { return true; }
virtual void clear() { m_props.clear(); }
};
SE_END_CXX
#endif