From fc86917da1a175c04e9bd2e5f0bedb0a48a81c26 Mon Sep 17 00:00:00 2001
From: Willem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>
Date: Thu, 17 Dec 2015 14:37:41 +0100
Subject: Replace boost::lexical_cast by stringstreams

This is to avoid the dependence of lexical_cast on the current locale.
The stringstreams used for the new string parsing/output functions
are explicitly imbued with the C/classic locale.
---
 include/astra/Utilities.h | 51 +++++++++++++++++++++++++++++++++++++++++++++++
 include/astra/XMLNode.h   |  8 ++++++++
 2 files changed, 59 insertions(+)

(limited to 'include/astra')

diff --git a/include/astra/Utilities.h b/include/astra/Utilities.h
index a3655a8..3ae0e6c 100644
--- a/include/astra/Utilities.h
+++ b/include/astra/Utilities.h
@@ -39,6 +39,57 @@ namespace astra {
 
 
 
+namespace StringUtil {
+
+// Exception thrown by functions below
+class bad_cast : public std::exception {
+public:
+	bad_cast() { }
+};
+
+
+//< Parse string as int.
+//< Throw exception on failure.
+int stringToInt(const std::string& s);
+
+//< Parse string as float.
+//< Throw exception on failure.
+float stringToFloat(const std::string& s);
+
+//< Parse string as double.
+//< Throw exception on failure.
+double stringToDouble(const std::string& s);
+
+template<typename T>
+T stringTo(const std::string& s);
+
+//< Parse comma/semicolon-separated string as float vector.
+//< Throw exception on failure.
+std::vector<float> stringToFloatVector(const std::string& s);
+
+//< Parse comma/semicolon-separated string as double vector.
+//< Throw exception on failure.
+std::vector<double> stringToDoubleVector(const std::string& s);
+
+template<typename T>
+std::vector<T> stringToVector(const std::string& s);
+
+
+
+//< Generate string from float.
+std::string floatToString(float f);
+
+//< Generate string from double.
+std::string doubleToString(double f);
+
+template<typename T>
+std::string toString(T f);
+
+}
+
+
+
+
 template<typename T, typename S>
 std::map<T,S> mergeMap(std::map<T,S> _mMap1, std::map<T,S> _mMap2) 
 {
diff --git a/include/astra/XMLNode.h b/include/astra/XMLNode.h
index 4d29d5c..7d1edf5 100644
--- a/include/astra/XMLNode.h
+++ b/include/astra/XMLNode.h
@@ -101,6 +101,12 @@ public:
 	 */ 
 	string getContent() const;
 
+	/** Get the content of the XML node as an integer
+	 *
+	 * @return node content
+	 */
+	int getContentInt() const;
+
 	/** Get the content of the XML node as a numerical.
 	 *
 	 * @return node content
@@ -152,6 +158,7 @@ public:
 	 */ 
 	float32 getAttributeNumerical(string _sName, float32 _fDefaultValue = 0) const;
 	double getAttributeNumericalDouble(string _sName, double _fDefaultValue = 0) const;
+	int getAttributeInt(string _sName, int _fDefaultValue = 0) const;
 
 	/** Get the value of a boolean attribute.
 	 *
@@ -186,6 +193,7 @@ public:
 	 * @return option value, _fDefaultValue if the option doesn't exist
 	 */ 
 	float32 getOptionNumerical(string _sKey, float32 _fDefaultValue = 0) const;
+	int getOptionInt(string _sKey, int _fDefaultValue = 0) const;
 
 	/** Get the value of an option within this XML Node
 	 *
-- 
cgit v1.2.3