43 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef BASE_XML_UTILS_H
 | 
						|
#define BASE_XML_UTILS_H
 | 
						|
 | 
						|
#include <boost/lexical_cast.hpp>
 | 
						|
#include <boost/optional.hpp>
 | 
						|
#include <map>
 | 
						|
 | 
						|
using namespace std;
 | 
						|
 | 
						|
//----------------------------------------------------------------
 | 
						|
 | 
						|
namespace xml_utils {
 | 
						|
	typedef std::map<std::string, std::string> attributes;
 | 
						|
 | 
						|
	void build_attributes(attributes &a, char const **attr);
 | 
						|
 | 
						|
	template <typename T>
 | 
						|
	T get_attr(attributes const &attr, string const &key) {
 | 
						|
		attributes::const_iterator it = attr.find(key);
 | 
						|
		if (it == attr.end()) {
 | 
						|
			ostringstream out;
 | 
						|
			out << "could not find attribute: " << key;
 | 
						|
			throw runtime_error(out.str());
 | 
						|
		}
 | 
						|
 | 
						|
		return boost::lexical_cast<T>(it->second);
 | 
						|
	}
 | 
						|
 | 
						|
	template <typename T>
 | 
						|
	boost::optional<T> get_opt_attr(attributes const &attr, string const &key) {
 | 
						|
		typedef boost::optional<T> rtype;
 | 
						|
		attributes::const_iterator it = attr.find(key);
 | 
						|
		if (it == attr.end())
 | 
						|
			return rtype();
 | 
						|
 | 
						|
		return rtype(boost::lexical_cast<T>(it->second));
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
//----------------------------------------------------------------
 | 
						|
 | 
						|
#endif
 |