From 73fa0a8df8203288aca032c71caa5ff47d35a3e2 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Thu, 17 Dec 2015 10:47:02 +0100 Subject: Remove unused functions --- src/Utilities.cpp | 97 ------------------------------------------------------- 1 file changed, 97 deletions(-) (limited to 'src/Utilities.cpp') diff --git a/src/Utilities.cpp b/src/Utilities.cpp index 3f65e9a..cb54e93 100644 --- a/src/Utilities.cpp +++ b/src/Utilities.cpp @@ -28,101 +28,4 @@ $Id$ #include "astra/Utilities.h" -using namespace std; -using namespace astra; -//----------------------------------------------------------------------------- -// Trim Whitespace Characters -void StringUtil::trim(std::string& _sString, bool _bLeft, bool _bRight) -{ - // trim right - if (_bRight) - _sString.erase(_sString.find_last_not_of(" \t\r") + 1); - - // trim left - if (_bLeft) - _sString.erase(0, _sString.find_first_not_of(" \t\r")); -} -//----------------------------------------------------------------------------- -// Split String -vector StringUtil::split(const string& _sString, const string& _sDelims) -{ - std::vector ret; - - size_t start, pos; - start = 0; - do { - pos = _sString.find_first_of(_sDelims, start); - if (pos == start) { - // Do nothing - start = pos + 1; - } else if (pos == string::npos) { - // Copy the rest of the string - ret.push_back(_sString.substr(start)); - break; - } else { - // Copy up to newt delimiter - ret.push_back(_sString.substr(start, pos - start)); - start = pos + 1; - } - - // Parse up to next real data (in case there are two delims after each other) - start = _sString.find_first_not_of(_sDelims, start); - } while (pos != string::npos); - - return ret; -} -//----------------------------------------------------------------------------- -// Cast string to int -bool StringUtil::toInt(const string& _sString, int& _iValue) -{ - std::istringstream ss(_sString); - ss >> _iValue; - return !ss.fail(); -} -//----------------------------------------------------------------------------- -// Cast string to float -bool StringUtil::toFloat32(const string& _sString, float32& _fValue) -{ - std::istringstream ss(_sString); - ss >> _fValue; - return !ss.fail(); -} -//----------------------------------------------------------------------------- -// Convert string to Lower Case -void StringUtil::toLowerCase(std::string& _sString) -{ - std::transform(_sString.begin(), - _sString.end(), - _sString.begin(), - ::tolower); -} -//----------------------------------------------------------------------------- -// Convert string to Upper Case -void StringUtil::toUpperCase(std::string& _sString) -{ - std::transform(_sString.begin(), - _sString.end(), - _sString.begin(), - ::toupper); -} -//----------------------------------------------------------------------------- - - - - -//----------------------------------------------------------------------------- -// Get Extension -string FileSystemUtil::getExtension(string& _sFilename) -{ - string sExtension = ""; - for (int i = _sFilename.length() - 1; 0 < i; i--) { - if (_sFilename[i] == '.') { - std::transform(sExtension.begin(),sExtension.end(),sExtension.begin(),::tolower); - return sExtension; - } - sExtension = _sFilename[i] + sExtension; - } - return ""; -} -//----------------------------------------------------------------------------- -- cgit v1.2.3 From fc86917da1a175c04e9bd2e5f0bedb0a48a81c26 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn 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. --- src/Utilities.cpp | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) (limited to 'src/Utilities.cpp') diff --git a/src/Utilities.cpp b/src/Utilities.cpp index cb54e93..4b80503 100644 --- a/src/Utilities.cpp +++ b/src/Utilities.cpp @@ -28,4 +28,99 @@ $Id$ #include "astra/Utilities.h" +#include +#include +#include +#include +#include +#include + +namespace astra { + +namespace StringUtil { + +int stringToInt(const std::string& s) +{ + double i; + std::istringstream iss(s); + iss.imbue(std::locale::classic()); + iss >> i; + if (iss.fail() || !iss.eof()) + throw bad_cast(); + return i; + +} + +float stringToFloat(const std::string& s) +{ + return (float)stringToDouble(s); +} + +double stringToDouble(const std::string& s) +{ + double f; + std::istringstream iss(s); + iss.imbue(std::locale::classic()); + iss >> f; + if (iss.fail() || !iss.eof()) + throw bad_cast(); + return f; +} + +template<> float stringTo(const std::string& s) { return stringToFloat(s); } +template<> double stringTo(const std::string& s) { return stringToDouble(s); } + +std::vector stringToFloatVector(const std::string &s) +{ + return stringToVector(s); +} + +std::vector stringToDoubleVector(const std::string &s) +{ + return stringToVector(s); +} + +template +std::vector stringToVector(const std::string& s) +{ + // split + std::vector items; + boost::split(items, s, boost::is_any_of(",;")); + + // init list + std::vector out; + out.resize(items.size()); + + // loop elements + for (unsigned int i = 0; i < items.size(); i++) { + out[i] = stringTo(items[i]); + } + return out; +} + + +std::string floatToString(float f) +{ + std::ostringstream s; + s.imbue(std::locale::classic()); + s << std::setprecision(9) << f; + return s.str(); +} + +std::string doubleToString(double f) +{ + std::ostringstream s; + s.imbue(std::locale::classic()); + s << std::setprecision(17) << f; + return s.str(); +} + + +template<> std::string toString(float f) { return floatToString(f); } +template<> std::string toString(double f) { return doubleToString(f); } + + +} + +} -- cgit v1.2.3