#include "tconvert.h" //#include "texception.h" #include "tfilepath.h" #ifndef TNZCORE_LIGHT #include #endif #ifdef WIN32 #pragma warning(disable : 4996) #include "windows.h" #endif class TStringConvertException : public TException { string m_string; public: TStringConvertException(const string str) : m_string(str) {} }; wstring toWideString(string s) { #ifdef TNZCORE_LIGHT std::wstring ws; ws.assign(s.begin(), s.end()); return ws; #else QString testString = QString::fromStdString(s); QString qString = QString::fromUtf8(s.c_str()); // To detect if 's' is UTF-8 encoded or not if (qString != testString && string(qString.toUtf8()) == s) return qString.toStdWString(); else return testString.toStdWString(); #endif } string toString(wstring ws) { #ifdef TNZCORE_LIGHT std::string s; s.assign(ws.begin(), ws.end()); return s; #else QString qString = QString::fromStdWString(ws); // Test if 'ws' is not unicode (UTF-8) #if 0 if(qString.toAscii() == qString) #else if (qString.toLatin1() == qString) #endif return qString.toStdString(); QByteArray a = qString.toUtf8(); return string(a); #endif } string toString(const TFilePath &fp) { return toString(fp.getWideString()); } wstring toWideString(int x) { return toWideString(toString(x)); } string toString(int value) { ostringstream ss; ss << value << '\0'; string s = ss.str(); return s; } string toString(unsigned long value) { ostringstream ss; ss << value << '\0'; string s = ss.str(); return s; } string toString(unsigned long long value) { ostringstream ss; ss << value << '\0'; string s = ss.str(); return s; } /*! The default precision is six decimal places. If the precision is less than of the decimal places in the fractonal part, the remainder is not cut off but rounded. */ string toString(double value, int prec) { ostringstream ss; ss.setf(std::ios_base::fixed, std::ios_base::floatfield); if (prec >= 0) ss.precision(prec); ss << value << '\0'; string s = ss.str(); return s; } string toString(void *p) { ostringstream ss; ss << p << '\0'; string s = ss.str(); return s; } int toInt(string str) { int value = 0; for (int i = 0; i < (int)str.size(); i++) value = value * 10 + str[i] - '0'; return value; } int toInt(wstring str) { return toInt(toString(str)); } bool isInt(string s) { int i = 0, len = (int)s.size(); if (len == 0) return false; if (s[0] == '-') { if (len == 1) return false; else i++; } while (i < len) { if (s[i] < '0' || s[i] > '9') return false; i++; } return true; } bool isDouble(string s) { int i = 0, len = (int)s.size(); if (len == 0) return false; if (i < len && s[i] == '-') i++; while (i < len && s[i] != '.') { if (s[i] < '0' || s[i] > '9') return false; i++; } if (i >= len) return true; i++; while (i < len) { if (s[i] < '0' || s[i] > '9') return false; i++; } return true; } bool isInt(wstring s) { return isInt(toString(s)); } bool isDouble(wstring s) { return isDouble(toString(s)); } double toDouble(string str) { double value; istringstream ss(str.c_str()); ss >> value; return value; } double toDouble(wstring str) { return toDouble(toString(str)); } wstring toWideString(double v, int p) { return toWideString(toString(v, p)); } string toUpper(string a) { #ifdef WIN32 return _strupr(const_cast(a.c_str())); #else string ret = a; for (int i = 0; i < (int)ret.length(); i++) ret[i] = toupper(ret[i]); return ret; #endif } string toLower(string a) { #ifdef WIN32 return _strlwr(const_cast(a.c_str())); #else string ret = a; for (int i = 0; i < (int)ret.length(); i++) ret[i] = tolower(ret[i]); return ret; #endif } wstring toUpper(wstring a) { #ifdef WIN32 return _wcsupr(const_cast(a.c_str())); #else wstring ret; for (int i = 0; i < (int)a.length(); i++) { wchar_t c = towupper(a[i]); ret += c; } return ret; #endif } wstring toLower(wstring a) { #ifdef WIN32 return _wcslwr(const_cast(a.c_str())); #else wstring ret; for (int i = 0; i < (int)a.length(); i++) { wchar_t c = towlower(a[i]); ret += c; } return ret; #endif }