syncevolution/src/syncevo/SafeConfigNode.cpp
Patrick Ohly de8461f802 code restructing: Exception, throwError()
Raising exceptions via throwError() looses the original source code
location information. Fixing that by explicitly passing that
information as additional parameter, created with the preprocessor
macro SE_HERE.

Several files included the complex SyncContext.h only because needed
throwError(). A better place for the revised implementation is the
Exception class which used to be in util.h, now Exception.h.

Simplifying the include statements exposed indirect include
dependencies and removed "using namespace std" from the compilation of
some source files which happened to rely on it. We want to get rid of
that name space polution, so fix the code instead of adding it back.
2014-05-02 16:43:52 +02:00

83 lines
2.4 KiB
C++

/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#include <syncevo/SafeConfigNode.h>
#include <syncevo/Exception.h>
#include <boost/foreach.hpp>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
SafeConfigNode::SafeConfigNode(const boost::shared_ptr<ConfigNode> &node) :
m_node(node),
m_readOnlyNode(node),
m_strictMode(true)
{
}
SafeConfigNode::SafeConfigNode(const boost::shared_ptr<const ConfigNode> &node) :
m_readOnlyNode(node),
m_strictMode(true)
{
}
InitStateString SafeConfigNode::readProperty(const std::string &property) const
{
InitStateString res = m_readOnlyNode->readProperty(escape(property));
return InitStateString(unescape(res.get()), res.wasSet());
}
void SafeConfigNode::writeProperty(const std::string &property,
const InitStateString &value,
const std::string &comment)
{
m_node->writeProperty(escape(property),
InitStateString(escape(value.get()), value.wasSet()),
comment);
}
void SafeConfigNode::readProperties(ConfigProps &props) const
{
ConfigProps original;
m_readOnlyNode->readProperties(original);
BOOST_FOREACH(const StringPair &prop, original) {
std::string key = unescape(prop.first);
std::string value = unescape(prop.second);
props[key] = value;
}
}
void SafeConfigNode::removeProperty(const std::string &property)
{
m_node->removeProperty(escape(property));
}
void SafeConfigNode::flush()
{
if (!m_node.get()) {
Exception::throwError(SE_HERE, getName() + ": read-only, flushing not allowed");
}
m_node->flush();
}
SE_END_CXX