/*! \file pistring.h * \brief String * * This file declare std operators and string conversions */ /* PIP - Platform Independent Primitives STD for PIString Copyright (C) 2020 Ivan Pelipenko peri4ko@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef PISTRING_STD_H #define PISTRING_STD_H #include #ifdef QNX typedef std::basic_string wstring; #endif #include "pistring.h" inline std::string PIString2StdString(const PIString & v) { std::string s; uint wc; uchar tc; if (v.size() > 0) { for (int i = 0; i < v.length(); ++i) { wc = uint(v.at(i).unicode16Code()); while (tc = wc & 0xFF, tc) { s.push_back(char(tc)); wc >>= 8; } /*if (at(i).isAscii()) s.push_back(at(i).toAscii()); else { s.push_back(at(i).toCharPtr()[0]); s.push_back(at(i).toCharPtr()[1]); }*/ } } return s; } inline PIString StdString2PIString(const std::string & v) { return PIString(v.c_str(), v.length()); } #ifdef HAS_LOCALE inline std::wstring PIString2StdWString(const PIString & v) { std::wstring s; for (int i = 0; i < v.length(); ++i) s.push_back(v.at(i).toWChar()); return s; } inline PIString StdWString2PIString(const std::wstring & v) { PIString s; uint l = v.size(); for (uint i = 0; i < l; ++i) s.push_back(v[i]); return s; } #endif //! \relatesalso PIChar \brief Output operator to \c std::ostream inline std::ostream & operator <<(std::ostream & s, const PIChar & v) {s << v.toCharPtr(); return s;} //! \relatesalso PIString \brief Return concatenated string inline PIString operator +(const PIString & f, const std::string & str) {PIString s(f); s += StdString2PIString(str); return s;} //! \relatesalso PIString \brief Return concatenated string inline PIString operator +(const std::string & str, const PIString & f) {return StdString2PIString(str) + f;} //! \relatesalso PIString \brief Output operator to std::ostream (cout) inline std::ostream & operator <<(std::ostream & s, const PIString & v) {for (int i = 0; i < v.length(); ++i) s << v[i]; return s;} //! \relatesalso PIString \brief Input operator from std::istream (cin) inline std::istream & operator >>(std::istream & s, PIString & v) {std::string ss; s >> ss; v = StdString2PIString(ss); return s;} //! \relatesalso PIStringList \brief Output operator to std::ostream (cout) inline std::ostream & operator <<(std::ostream & s, const PIStringList & v) { s << PIChar("{"); for (uint i = 0; i < v.size(); ++i) { s << PIChar("\"") << v[i] << PIChar("\""); if (i < v.size() - 1) s << PIStringAscii(", "); } s << PIChar("}"); return s; } #endif // PISTRING_STD_H