diff options
Diffstat (limited to 'Swiften/Parser/AttributeMap.cpp')
| -rw-r--r-- | Swiften/Parser/AttributeMap.cpp | 62 | 
1 files changed, 62 insertions, 0 deletions
| diff --git a/Swiften/Parser/AttributeMap.cpp b/Swiften/Parser/AttributeMap.cpp new file mode 100644 index 0000000..1aeaf99 --- /dev/null +++ b/Swiften/Parser/AttributeMap.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2011 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/Parser/AttributeMap.h> + +#include <algorithm> +#include <boost/optional.hpp> + +using namespace Swift; + +namespace { +	struct AttributeIs { +		AttributeIs(const Attribute& attribute) : attribute(attribute) { +		} + +		bool operator()(const AttributeMap::Entry& o) const { +			return o.getAttribute() == attribute; +		} + +		Attribute attribute; +	}; +} + +AttributeMap::AttributeMap() { +} + +std::string AttributeMap::getAttribute(const std::string& attribute, const std::string& ns) const { +	AttributeValueMap::const_iterator i = std::find_if(attributes.begin(), attributes.end(), AttributeIs(Attribute(attribute, ns))); +	if (i == attributes.end()) { +		return ""; +	} +	else { +		return i->getValue(); +	} +} + +bool AttributeMap::getBoolAttribute(const std::string& attribute, bool defaultValue) const { +	AttributeValueMap::const_iterator i = std::find_if(attributes.begin(), attributes.end(), AttributeIs(Attribute(attribute, ""))); +	if (i == attributes.end()) { +		return defaultValue; +	} +	else { +		return i->getValue() == "true" || i->getValue() == "1"; +	} +} + +boost::optional<std::string> AttributeMap::getAttributeValue(const std::string& attribute) const { +	AttributeValueMap::const_iterator i = std::find_if(attributes.begin(), attributes.end(), AttributeIs(Attribute(attribute, ""))); +	if (i == attributes.end()) { +		return boost::optional<std::string>(); +	} +	else { +		return i->getValue(); +	} +} + +void AttributeMap::addAttribute(const std::string& name, const std::string& ns, const std::string& value) { +	attributes.push_back(Entry(Attribute(name, ns), value)); +} | 
 Swift
 Swift