code format
This commit is contained in:
@@ -1,20 +1,20 @@
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
Unicode char
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
PIP - Platform Independent Primitives
|
||||
Unicode char
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@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 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.
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "piincludes_p.h"
|
||||
@@ -30,7 +30,7 @@
|
||||
#endif
|
||||
char * __syslocname__ = 0;
|
||||
char * __sysoemname__ = 0;
|
||||
char * __utf8name__ = 0;
|
||||
char * __utf8name__ = 0;
|
||||
#ifdef BLACKBERRY
|
||||
# include <ctype.h>
|
||||
#endif
|
||||
@@ -57,9 +57,9 @@ ushort charFromCodepage(const char * c, int size, const char * codepage, int * t
|
||||
UConverter * cc = ucnv_open(codepage, &e);
|
||||
if (cc) {
|
||||
UChar uc(0);
|
||||
e = (UErrorCode)0;
|
||||
e = (UErrorCode)0;
|
||||
ret = ucnv_toUChars(cc, &uc, 1, c, size, &e);
|
||||
//printf("PIChar %d -> %d\n", c[0], uc);
|
||||
// printf("PIChar %d -> %d\n", c[0], uc);
|
||||
if (taken) *taken = ret;
|
||||
ucnv_close(cc);
|
||||
return ushort(uc);
|
||||
@@ -76,8 +76,8 @@ ushort charFromCodepage(const char * c, int size, const char * codepage, int * t
|
||||
memset(&state, 0, sizeof(state));
|
||||
wchar_t wc;
|
||||
ret = mbrtowc(&wc, c, size, &state);
|
||||
//printf("mbtowc = %d\n", ret);
|
||||
//piCout << errorString();
|
||||
// printf("mbtowc = %d\n", ret);
|
||||
// piCout << errorString();
|
||||
if (ret < 1) return 0;
|
||||
return ushort(wc);
|
||||
# endif
|
||||
@@ -87,16 +87,15 @@ ushort charFromCodepage(const char * c, int size, const char * codepage, int * t
|
||||
|
||||
|
||||
int charCompare(const PIChar & f, const PIChar & s) {
|
||||
if (f.isAscii() && s.isAscii())
|
||||
return strncmp(f.toCharPtr(), s.toCharPtr(), 1);
|
||||
if (f.isAscii() && s.isAscii()) return strncmp(f.toCharPtr(), s.toCharPtr(), 1);
|
||||
return
|
||||
#ifdef PIP_ICU
|
||||
u_strCompare((const UChar*)f.toWCharPtr(), 1, (const UChar*)s.toWCharPtr(), 1, FALSE);
|
||||
u_strCompare((const UChar *)f.toWCharPtr(), 1, (const UChar *)s.toWCharPtr(), 1, FALSE);
|
||||
#else
|
||||
# ifdef WINDOWS
|
||||
CompareStringW(LOCALE_USER_DEFAULT, 0, (PCNZWCH)f.toWCharPtr(), 1, (PCNZWCH)s.toWCharPtr(), 1) - 2;
|
||||
CompareStringW(LOCALE_USER_DEFAULT, 0, (PCNZWCH)f.toWCharPtr(), 1, (PCNZWCH)s.toWCharPtr(), 1) - 2;
|
||||
# else
|
||||
wcsncmp((const wchar_t *)f.toWCharPtr(), (const wchar_t *)s.toWCharPtr(), 1);
|
||||
wcsncmp((const wchar_t *)f.toWCharPtr(), (const wchar_t *)s.toWCharPtr(), 1);
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
@@ -112,8 +111,6 @@ bool winIsCharType(const ushort * ch, int type) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
PIChar::PIChar(const char * c, int * bytes) {
|
||||
ch = charFromCodepage(c, 4, __syslocname__, bytes);
|
||||
}
|
||||
@@ -136,33 +133,34 @@ PIChar PIChar::fromSystem(char c) {
|
||||
PIChar PIChar::fromUTF8(const char * c) {
|
||||
PIChar ret;
|
||||
int l = 0;
|
||||
while (c[l] != '\0') ++l;
|
||||
while (c[l] != '\0')
|
||||
++l;
|
||||
ret.ch = charFromCodepage(c, l, __utf8name__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
bool PIChar::operator ==(const PIChar & o) const {
|
||||
bool PIChar::operator==(const PIChar & o) const {
|
||||
return ch == o.ch;
|
||||
}
|
||||
|
||||
|
||||
bool PIChar::operator >(const PIChar & o) const {
|
||||
bool PIChar::operator>(const PIChar & o) const {
|
||||
return charCompare(*this, o) > 0;
|
||||
}
|
||||
|
||||
|
||||
bool PIChar::operator <(const PIChar & o) const {
|
||||
bool PIChar::operator<(const PIChar & o) const {
|
||||
return charCompare(*this, o) < 0;
|
||||
}
|
||||
|
||||
|
||||
bool PIChar::operator >=(const PIChar & o) const {
|
||||
bool PIChar::operator>=(const PIChar & o) const {
|
||||
return charCompare(*this, o) >= 0;
|
||||
}
|
||||
|
||||
|
||||
bool PIChar::operator <=(const PIChar & o) const {
|
||||
bool PIChar::operator<=(const PIChar & o) const {
|
||||
return charCompare(*this, o) <= 0;
|
||||
}
|
||||
|
||||
@@ -263,12 +261,12 @@ bool PIChar::isAscii() const {
|
||||
|
||||
|
||||
const wchar_t * PIChar::toWCharPtr() const {
|
||||
return reinterpret_cast<const wchar_t * >(&ch);
|
||||
return reinterpret_cast<const wchar_t *>(&ch);
|
||||
}
|
||||
|
||||
|
||||
const char * PIChar::toCharPtr() const {
|
||||
return reinterpret_cast<const char * >(&ch);
|
||||
return reinterpret_cast<const char *>(&ch);
|
||||
}
|
||||
|
||||
|
||||
@@ -285,13 +283,13 @@ char PIChar::toConsole1Byte() const {
|
||||
if (cc) {
|
||||
char uc[8];
|
||||
e = (UErrorCode)0;
|
||||
ucnv_fromUChars(cc, uc, 8, (const UChar*)(&ch), 1, &e);
|
||||
ucnv_fromUChars(cc, uc, 8, (const UChar *)(&ch), 1, &e);
|
||||
ucnv_close(cc);
|
||||
return uc[0];
|
||||
}
|
||||
#endif
|
||||
#ifdef WINDOWS
|
||||
char ret[4] = {0,0,0,0};
|
||||
char ret[4] = {0, 0, 0, 0};
|
||||
WideCharToMultiByte(CP_OEMCP, 0, (LPCWCH)&ch, 1, ret, 4, NULL, NULL);
|
||||
return ret[0];
|
||||
#endif
|
||||
@@ -307,13 +305,13 @@ char PIChar::toSystem() const {
|
||||
if (cc) {
|
||||
char uc[8];
|
||||
e = (UErrorCode)0;
|
||||
ucnv_fromUChars(cc, uc, 8, (const UChar*)(&ch), 1, &e);
|
||||
ucnv_fromUChars(cc, uc, 8, (const UChar *)(&ch), 1, &e);
|
||||
ucnv_close(cc);
|
||||
return uc[0];
|
||||
}
|
||||
#endif
|
||||
#ifdef WINDOWS
|
||||
char ret[4] = {0,0,0,0};
|
||||
char ret[4] = {0, 0, 0, 0};
|
||||
WideCharToMultiByte(CP_ACP, 0, (LPCWCH)&ch, 1, ret, 4, NULL, NULL);
|
||||
return ret[0];
|
||||
#endif
|
||||
@@ -326,13 +324,12 @@ PIChar PIChar::toUpper() const {
|
||||
#ifdef PIP_ICU
|
||||
UChar c(0);
|
||||
UErrorCode e((UErrorCode)0);
|
||||
u_strToUpper(&c, 1, (const UChar*)(&ch), 1, 0, &e);
|
||||
u_strToUpper(&c, 1, (const UChar *)(&ch), 1, 0, &e);
|
||||
return PIChar((ushort)c);
|
||||
#else
|
||||
# ifdef WINDOWS
|
||||
ushort wc = 0;
|
||||
if (LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_UPPERCASE, (LPCWSTR)&ch, 1, (LPWSTR)&wc, 1) == 1)
|
||||
return PIChar(wc);
|
||||
if (LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_UPPERCASE, (LPCWSTR)&ch, 1, (LPWSTR)&wc, 1) == 1) return PIChar(wc);
|
||||
# endif
|
||||
#endif
|
||||
return PIChar((ushort)towupper(ch));
|
||||
@@ -344,23 +341,23 @@ PIChar PIChar::toLower() const {
|
||||
#ifdef PIP_ICU
|
||||
UChar c(0);
|
||||
UErrorCode e((UErrorCode)0);
|
||||
u_strToLower(&c, 1, (const UChar*)(&ch), 1, 0, &e);
|
||||
u_strToLower(&c, 1, (const UChar *)(&ch), 1, 0, &e);
|
||||
return PIChar((ushort)c);
|
||||
#else
|
||||
# ifdef WINDOWS
|
||||
ushort wc = 0;
|
||||
if (LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, (LPCWSTR)&ch, 1, (LPWSTR)&wc, 1) == 1)
|
||||
return PIChar(wc);
|
||||
if (LCMapStringW(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, (LPCWSTR)&ch, 1, (LPWSTR)&wc, 1) == 1) return PIChar(wc);
|
||||
# endif
|
||||
#endif
|
||||
return PIChar((ushort)towlower(ch));
|
||||
}
|
||||
|
||||
|
||||
PICout operator <<(PICout s, const PIChar & v) {
|
||||
PICout operator<<(PICout s, const PIChar & v) {
|
||||
s.space();
|
||||
s.saveAndSetControls(0);
|
||||
if (v.isAscii()) s << char(v.ch);
|
||||
if (v.isAscii())
|
||||
s << char(v.ch);
|
||||
else {
|
||||
#ifdef PIP_ICU
|
||||
UErrorCode e((UErrorCode)0);
|
||||
@@ -369,13 +366,13 @@ PICout operator <<(PICout s, const PIChar & v) {
|
||||
char uc[8];
|
||||
memset(uc, 0, 8);
|
||||
e = (UErrorCode)0;
|
||||
ucnv_fromUChars(cc, uc, 8, (const UChar*)(&v.ch), 1, &e);
|
||||
ucnv_fromUChars(cc, uc, 8, (const UChar *)(&v.ch), 1, &e);
|
||||
ucnv_close(cc);
|
||||
s << uc;
|
||||
} else
|
||||
#endif
|
||||
#ifdef WINDOWS
|
||||
s << v.toSystem();
|
||||
s << v.toSystem();
|
||||
#else
|
||||
s << PIString(v);
|
||||
#endif
|
||||
|
||||
@@ -5,22 +5,22 @@
|
||||
* \~russian Один символ строки
|
||||
*/
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
Unicode char
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
PIP - Platform Independent Primitives
|
||||
Unicode char
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@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 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.
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef PICHAR_H
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
C-String class
|
||||
Ivan Pelipenko peri4ko@yandex.ru
|
||||
PIP - Platform Independent Primitives
|
||||
C-String class
|
||||
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 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.
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "piconstchars.h"
|
||||
|
||||
#include "pistring.h"
|
||||
|
||||
|
||||
@@ -83,8 +84,7 @@ PIConstChars PIConstChars::mid(const int start, const int len) const {
|
||||
if (l < 0) {
|
||||
return PIConstChars(str + s, (int)size() - s);
|
||||
} else {
|
||||
if (l > (int)size() - s)
|
||||
l = (int)size() - s;
|
||||
if (l > (int)size() - s) l = (int)size() - s;
|
||||
return PIConstChars(str + s, l);
|
||||
}
|
||||
return PIConstChars("");
|
||||
|
||||
@@ -3,24 +3,24 @@
|
||||
* \brief
|
||||
* \~english C-String class
|
||||
* \~russian Класс C-строки
|
||||
*/
|
||||
*/
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
C-String class
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
PIP - Platform Independent Primitives
|
||||
C-String class
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@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 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.
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef PICONSTCHARS_H
|
||||
@@ -35,7 +35,6 @@
|
||||
//! \~russian Класс C-строки.
|
||||
class PIP_EXPORT PIConstChars {
|
||||
public:
|
||||
|
||||
//! \~english Contructs an null string.
|
||||
//! \~russian Создает нулевую строку.
|
||||
PIConstChars() {}
|
||||
@@ -64,27 +63,27 @@ public:
|
||||
|
||||
//! \~english Read-only access to character by `index`.
|
||||
//! \~russian Доступ на чтение к символу по индексу `index`.
|
||||
inline char operator [](size_t index) const {return str[index];}
|
||||
inline char operator[](size_t index) const { return str[index]; }
|
||||
|
||||
//! \~english Read-only access to character by `index`.
|
||||
//! \~russian Доступ на чтение к символу по индексу `index`.
|
||||
inline char at(size_t index) const {return str[index];}
|
||||
inline char at(size_t index) const { return str[index]; }
|
||||
|
||||
//! \~english Returns \c char * string pointer.
|
||||
//! \~russian Возвращает \c char * указатель строки.
|
||||
inline const char * data() const {return str;}
|
||||
inline const char * data() const { return str; }
|
||||
|
||||
//! \~english Returns \c true if string doesn`t have any data.
|
||||
//! \~russian Возвращает \c true если строка не имеет данных.
|
||||
inline bool isNull() const {return !str;}
|
||||
inline bool isNull() const { return !str; }
|
||||
|
||||
//! \~english Returns \c true if string is empty, i.e. length = 0, or null.
|
||||
//! \~russian Возвращает \c true если строка пустая, т.е. длина = 0, или нулевая.
|
||||
inline bool isEmpty() const {return len == 0;}
|
||||
inline bool isEmpty() const { return len == 0; }
|
||||
|
||||
//! \~english Returns \c true if string is not empty, i.e. length > 0.
|
||||
//! \~russian Возвращает \c true если строка непустая, т.е. длина > 0.
|
||||
inline bool isNotEmpty() const {return len > 0;}
|
||||
inline bool isNotEmpty() const { return len > 0; }
|
||||
|
||||
//! \~english Returns \c true if string contains character "c".
|
||||
//! \~russian Возвращает \c true если строка содержит символ "c".
|
||||
@@ -92,15 +91,15 @@ public:
|
||||
|
||||
//! \~english Returns characters length of string.
|
||||
//! \~russian Возвращает длину строки в символах.
|
||||
inline size_t length() const {return len;}
|
||||
inline size_t length() const { return len; }
|
||||
|
||||
//! \~english Returns characters length of string.
|
||||
//! \~russian Возвращает длину строки в символах.
|
||||
inline size_t size() const {return len;}
|
||||
inline size_t size() const { return len; }
|
||||
|
||||
//! \~english Returns characters length of string.
|
||||
//! \~russian Возвращает длину строки в символах.
|
||||
inline ssize_t size_s() const {return len;}
|
||||
inline ssize_t size_s() const { return len; }
|
||||
|
||||
//! \~english Returns if string starts with "str".
|
||||
//! \~russian Возвращает начинается ли строка со "str".
|
||||
@@ -161,7 +160,7 @@ public:
|
||||
//! \~english Returns copy of this string without spaces at the start and at the end.
|
||||
//! \~russian Возвращает копию этой строки без пробельных символов с начала и конца.
|
||||
//! \~\sa \a trim()
|
||||
PIConstChars trimmed() const {return PIConstChars(*this).trim();}
|
||||
PIConstChars trimmed() const { return PIConstChars(*this).trim(); }
|
||||
|
||||
//! \~english Returns as PIString.
|
||||
//! \~russian Возвращает как PIString.
|
||||
@@ -169,7 +168,7 @@ public:
|
||||
|
||||
//! \~english Assign operator.
|
||||
//! \~russian Оператор присваивания.
|
||||
inline PIConstChars & operator =(const PIConstChars & s) {
|
||||
inline PIConstChars & operator=(const PIConstChars & s) {
|
||||
if (this == &s) return *this;
|
||||
len = s.len;
|
||||
str = s.str;
|
||||
@@ -178,14 +177,14 @@ public:
|
||||
|
||||
//! \~english Assign move operator.
|
||||
//! \~russian Оператор перемещающего присваивания.
|
||||
inline PIConstChars & operator =(PIConstChars && s) {
|
||||
inline PIConstChars & operator=(PIConstChars && s) {
|
||||
swap(s);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Assign operator.
|
||||
//! \~russian Оператор присваивания.
|
||||
inline PIConstChars & operator =(const char * s) {
|
||||
inline PIConstChars & operator=(const char * s) {
|
||||
str = s;
|
||||
len = strlen(s);
|
||||
return *this;
|
||||
@@ -193,7 +192,7 @@ public:
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
inline bool operator ==(const PIConstChars & s) const {
|
||||
inline bool operator==(const PIConstChars & s) const {
|
||||
if (isNull() && s.isNull()) return true;
|
||||
if (isNull() xor s.isNull()) return false;
|
||||
if (size() != s.size()) return false;
|
||||
@@ -202,27 +201,25 @@ public:
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
inline bool operator !=(const PIConstChars & s) const {return !(*this == s);}
|
||||
inline bool operator!=(const PIConstChars & s) const { return !(*this == s); }
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
inline bool operator <(const PIConstChars & s) const {
|
||||
if ( isNull() && s.isNull()) return false;
|
||||
if ( isNull() && !s.isNull()) return true ;
|
||||
if (!isNull() && s.isNull()) return false;
|
||||
if (size() == s.size())
|
||||
return strcmp(str, s.str) < 0;
|
||||
inline bool operator<(const PIConstChars & s) const {
|
||||
if (isNull() && s.isNull()) return false;
|
||||
if (isNull() && !s.isNull()) return true;
|
||||
if (!isNull() && s.isNull()) return false;
|
||||
if (size() == s.size()) return strcmp(str, s.str) < 0;
|
||||
return size() < s.size();
|
||||
}
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
inline bool operator >(const PIConstChars & s) const {
|
||||
if ( isNull() && s.isNull()) return false;
|
||||
if ( isNull() && !s.isNull()) return false;
|
||||
if (!isNull() && s.isNull()) return true ;
|
||||
if (size() == s.size())
|
||||
return strcmp(str, s.str) > 0;
|
||||
inline bool operator>(const PIConstChars & s) const {
|
||||
if (isNull() && s.isNull()) return false;
|
||||
if (isNull() && !s.isNull()) return false;
|
||||
if (!isNull() && s.isNull()) return true;
|
||||
if (size() == s.size()) return strcmp(str, s.str) > 0;
|
||||
return size() > s.size();
|
||||
}
|
||||
|
||||
@@ -233,21 +230,21 @@ public:
|
||||
return piHashData((const uchar *)str, len);
|
||||
}
|
||||
|
||||
inline void swap(PIConstChars& v) {
|
||||
inline void swap(PIConstChars & v) {
|
||||
piSwap<const char *>(str, v.str);
|
||||
piSwap<size_t>(len, v.len);
|
||||
}
|
||||
|
||||
private:
|
||||
const char * str = nullptr;
|
||||
size_t len = 0;
|
||||
size_t len = 0;
|
||||
};
|
||||
|
||||
|
||||
//! \relatesalso PICout
|
||||
//! \~english Output operator to \a PICout.
|
||||
//! \~russian Оператор вывода в \a PICout.
|
||||
inline PICout operator <<(PICout s, const PIConstChars & v) {
|
||||
inline PICout operator<<(PICout s, const PIConstChars & v) {
|
||||
s.space();
|
||||
if (v.isNull())
|
||||
s.write("(null)");
|
||||
@@ -260,7 +257,10 @@ inline PICout operator <<(PICout s, const PIConstChars & v) {
|
||||
}
|
||||
|
||||
|
||||
template<> inline uint piHash(const PIConstChars & s) {return s.hash();}
|
||||
template<>
|
||||
inline uint piHash(const PIConstChars & s) {
|
||||
return s.hash();
|
||||
}
|
||||
|
||||
|
||||
#endif // PICONSTCHARS_H
|
||||
|
||||
@@ -1,26 +1,27 @@
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
String
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
PIP - Platform Independent Primitives
|
||||
String
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@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 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.
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "piincludes_p.h"
|
||||
#include "pistring.h"
|
||||
#include "pistringlist.h"
|
||||
|
||||
#include "piincludes_p.h"
|
||||
#include "pimathbase.h"
|
||||
#include "pistringlist.h"
|
||||
#ifdef PIP_ICU
|
||||
# define U_NOEXCEPT
|
||||
# include "unicode/ucnv.h"
|
||||
@@ -28,9 +29,9 @@
|
||||
#ifdef WINDOWS
|
||||
# include <stringapiset.h>
|
||||
#endif
|
||||
#include <string>
|
||||
#include <locale>
|
||||
#include <codecvt>
|
||||
#include <locale>
|
||||
#include <string>
|
||||
|
||||
//! \class PIString pistring.h
|
||||
//! \~\details
|
||||
@@ -51,35 +52,36 @@
|
||||
//!
|
||||
|
||||
|
||||
|
||||
|
||||
const char PIString::toBaseN[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
|
||||
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
|
||||
'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^'};
|
||||
const char PIString::fromBaseN[] = {(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char) 0, (char) 1, (char) 2, (char) 3, (char) 4, (char) 5, (char) 6, (char) 7, (char) 8, (char) 9, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)10, (char)11, (char)12, (char)13, (char)14, (char)15, (char)16, (char)17, (char)18, (char)19, (char)20, (char)21, (char)22, (char)23, (char)24,
|
||||
(char)25, (char)26, (char)27, (char)28, (char)29, (char)30, (char)31, (char)32, (char)33, (char)34, (char)35, (char)36, (char)37, (char)38, (char)39, (char)-1,
|
||||
(char)-1, (char)10, (char)11, (char)12, (char)13, (char)14, (char)15, (char)16, (char)17, (char)18, (char)19, (char)20, (char)21, (char)22, (char)23, (char)24,
|
||||
(char)25, (char)26, (char)27, (char)28, (char)29, (char)30, (char)31, (char)32, (char)33, (char)34, (char)35, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1};
|
||||
const char PIString::toBaseN[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
|
||||
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^'};
|
||||
const char PIString::fromBaseN[] = {
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)0, (char)1, (char)2, (char)3,
|
||||
(char)4, (char)5, (char)6, (char)7, (char)8, (char)9, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)10, (char)11, (char)12, (char)13, (char)14, (char)15, (char)16, (char)17, (char)18, (char)19, (char)20, (char)21, (char)22,
|
||||
(char)23, (char)24, (char)25, (char)26, (char)27, (char)28, (char)29, (char)30, (char)31, (char)32, (char)33, (char)34, (char)35,
|
||||
(char)36, (char)37, (char)38, (char)39, (char)-1, (char)-1, (char)10, (char)11, (char)12, (char)13, (char)14, (char)15, (char)16,
|
||||
(char)17, (char)18, (char)19, (char)20, (char)21, (char)22, (char)23, (char)24, (char)25, (char)26, (char)27, (char)28, (char)29,
|
||||
(char)30, (char)31, (char)32, (char)33, (char)34, (char)35, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1,
|
||||
(char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1};
|
||||
|
||||
const float PIString::ElideLeft = 0.f;
|
||||
const float PIString::ElideCenter = .5f;
|
||||
const float PIString::ElideRight = 1.f;
|
||||
|
||||
|
||||
template <typename T>
|
||||
template<typename T>
|
||||
T toDecimal(const PIString & s) {
|
||||
int part = 0, exp = 0;
|
||||
bool negative = false, negative_exp = false, err = false, has_digit = false;
|
||||
@@ -91,8 +93,8 @@ T toDecimal(const PIString & s) {
|
||||
if (pc.isSpace()) continue;
|
||||
if (c >= '0' && c <= '9') {
|
||||
has_digit = true;
|
||||
ret = c - '0';
|
||||
part = 1;
|
||||
ret = c - '0';
|
||||
part = 1;
|
||||
continue;
|
||||
}
|
||||
if (c == '+') {
|
||||
@@ -101,7 +103,7 @@ T toDecimal(const PIString & s) {
|
||||
}
|
||||
if (c == '-') {
|
||||
negative = true;
|
||||
part = 1;
|
||||
part = 1;
|
||||
continue;
|
||||
}
|
||||
if (c == '.' || c == ',') {
|
||||
@@ -113,7 +115,7 @@ T toDecimal(const PIString & s) {
|
||||
case 1: // integer
|
||||
if (c >= '0' && c <= '9') {
|
||||
has_digit = true;
|
||||
ret = ret * 10 + (c - '0');
|
||||
ret = ret * 10 + (c - '0');
|
||||
continue;
|
||||
}
|
||||
if (c == '.' || c == ',') {
|
||||
@@ -129,7 +131,7 @@ T toDecimal(const PIString & s) {
|
||||
case 2: // fractional
|
||||
if (c >= '0' && c <= '9') {
|
||||
has_digit = true;
|
||||
frac = frac * 10 + (c - '0');
|
||||
frac = frac * 10 + (c - '0');
|
||||
frac_delim *= 10.;
|
||||
continue;
|
||||
}
|
||||
@@ -146,7 +148,7 @@ T toDecimal(const PIString & s) {
|
||||
}
|
||||
if (c == '-') {
|
||||
negative_exp = true;
|
||||
part = 4;
|
||||
part = 4;
|
||||
continue;
|
||||
}
|
||||
case 4: // exponent
|
||||
@@ -163,24 +165,42 @@ T toDecimal(const PIString & s) {
|
||||
ret += frac;
|
||||
if (negative && has_digit) ret = -ret;
|
||||
if (exp > 0) {
|
||||
if (negative_exp) ret /= pow10((T)exp);
|
||||
else ret *= pow10((T)exp);
|
||||
if (negative_exp)
|
||||
ret /= pow10((T)exp);
|
||||
else
|
||||
ret *= pow10((T)exp);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
#define pisprintf(f, v) char ch[256]; memset(ch, 0, 256); snprintf(ch, 256, f, v); return PIStringAscii(ch);
|
||||
#define pisprintf(f, v) \
|
||||
char ch[256]; \
|
||||
memset(ch, 0, 256); \
|
||||
snprintf(ch, 256, f, v); \
|
||||
return PIStringAscii(ch);
|
||||
|
||||
PIString PIString::itos(const int num) {pisprintf("%d", num);}
|
||||
PIString PIString::ltos(const long num) {pisprintf("%ld", num);}
|
||||
PIString PIString::lltos(const llong num) {pisprintf("%lld", num);}
|
||||
PIString PIString::uitos(const uint num) {pisprintf("%u", num);}
|
||||
PIString PIString::ultos(const ulong num) {pisprintf("%lu", num);}
|
||||
PIString PIString::ulltos(const ullong num) {pisprintf("%llu", num);}
|
||||
PIString PIString::itos(const int num) {
|
||||
pisprintf("%d", num);
|
||||
}
|
||||
PIString PIString::ltos(const long num) {
|
||||
pisprintf("%ld", num);
|
||||
}
|
||||
PIString PIString::lltos(const llong num) {
|
||||
pisprintf("%lld", num);
|
||||
}
|
||||
PIString PIString::uitos(const uint num) {
|
||||
pisprintf("%u", num);
|
||||
}
|
||||
PIString PIString::ultos(const ulong num) {
|
||||
pisprintf("%lu", num);
|
||||
}
|
||||
PIString PIString::ulltos(const ullong num) {
|
||||
pisprintf("%llu", num);
|
||||
}
|
||||
PIString PIString::dtos(const double num, char format, int precision) {
|
||||
char f[8] = "%.";
|
||||
int wr = snprintf(&(f[2]), 4, "%d", precision);
|
||||
int wr = snprintf(&(f[2]), 4, "%d", precision);
|
||||
if (wr > 4) wr = 4;
|
||||
f[2 + wr] = format;
|
||||
f[3 + wr] = 0;
|
||||
@@ -189,7 +209,6 @@ PIString PIString::dtos(const double num, char format, int precision) {
|
||||
#undef pisprintf
|
||||
|
||||
|
||||
|
||||
PIString PIString::fromNumberBaseS(const llong value, int base, bool * ok) {
|
||||
if (value == 0LL) return PIString('0');
|
||||
if ((base < 2) || (base > 40)) {
|
||||
@@ -200,11 +219,11 @@ PIString PIString::fromNumberBaseS(const llong value, int base, bool * ok) {
|
||||
if (base == 10) return lltos(value);
|
||||
PIString ret;
|
||||
llong v = value < 0 ? -value : value, cn;
|
||||
int b = base;
|
||||
int b = base;
|
||||
while (v >= llong(base)) {
|
||||
cn = v % b;
|
||||
v /= b;
|
||||
//cout << int(cn) << ", " << int(v) << endl;
|
||||
// cout << int(cn) << ", " << int(v) << endl;
|
||||
ret.push_front(PIChar(toBaseN[cn]));
|
||||
}
|
||||
if (v > 0) ret.push_front(PIChar(toBaseN[v]));
|
||||
@@ -222,11 +241,11 @@ PIString PIString::fromNumberBaseU(const ullong value, int base, bool * ok) {
|
||||
if (base == 10) return ulltos(value);
|
||||
PIString ret;
|
||||
ullong v = value, cn;
|
||||
int b = base;
|
||||
int b = base;
|
||||
while (v >= ullong(base)) {
|
||||
cn = v % b;
|
||||
v /= b;
|
||||
//cout << int(cn) << ", " << int(v) << endl;
|
||||
// cout << int(cn) << ", " << int(v) << endl;
|
||||
ret.push_front(PIChar(toBaseN[cn]));
|
||||
}
|
||||
if (v > 0) ret.push_front(PIChar(toBaseN[v]));
|
||||
@@ -236,7 +255,7 @@ PIString PIString::fromNumberBaseU(const ullong value, int base, bool * ok) {
|
||||
|
||||
llong PIString::toNumberBase(const PIString & value, int base, bool * ok) {
|
||||
static const PIString s_0x = PIStringAscii("0x");
|
||||
PIString v = value.trimmed();
|
||||
PIString v = value.trimmed();
|
||||
if (base < 0) {
|
||||
int ind = v.find(s_0x);
|
||||
if (ind == 0 || ind == 1) {
|
||||
@@ -276,7 +295,7 @@ llong PIString::toNumberBase(const PIString & value, int base, bool * ok) {
|
||||
|
||||
|
||||
void PIString::appendFromChars(const char * c, int s, const char * codepage) {
|
||||
// piCout << "appendFromChars";
|
||||
// piCout << "appendFromChars";
|
||||
if (s == 0) return;
|
||||
int old_sz = size_s();
|
||||
if (s == -1) s = strlen(c);
|
||||
@@ -285,9 +304,9 @@ void PIString::appendFromChars(const char * c, int s, const char * codepage) {
|
||||
UConverter * cc = ucnv_open(codepage, &e);
|
||||
if (cc) {
|
||||
d.enlarge(s);
|
||||
e = (UErrorCode)0;
|
||||
int sz = ucnv_toUChars(cc, (UChar*)(d.data(old_sz)), s, c, s, &e);
|
||||
d.resize(old_sz+sz);
|
||||
e = (UErrorCode)0;
|
||||
int sz = ucnv_toUChars(cc, (UChar *)(d.data(old_sz)), s, c, s, &e);
|
||||
d.resize(old_sz + sz);
|
||||
ucnv_close(cc);
|
||||
return;
|
||||
}
|
||||
@@ -299,7 +318,7 @@ void PIString::appendFromChars(const char * c, int s, const char * codepage) {
|
||||
MultiByteToWideChar((uint)(uintptr_t)codepage, MB_ERR_INVALID_CHARS, c, s, (LPWSTR)d.data(old_sz), sz);
|
||||
# else
|
||||
std::wstring_convert<std::codecvt_utf8<char16_t>, char16_t> ucs2conv;
|
||||
std::u16string ucs2 = ucs2conv.from_bytes(c, c+s);
|
||||
std::u16string ucs2 = ucs2conv.from_bytes(c, c + s);
|
||||
d.enlarge(ucs2.size());
|
||||
ucs2.copy((char16_t *)d.data(old_sz), ucs2.size());
|
||||
# endif
|
||||
@@ -309,7 +328,7 @@ void PIString::appendFromChars(const char * c, int s, const char * codepage) {
|
||||
|
||||
PIString PIString::fromConsole(const PIByteArray & ba) {
|
||||
PIString ret;
|
||||
if (ba.isNotEmpty()) ret.appendFromChars((const char*)ba.data(), ba.size(), __sysoemname__);
|
||||
if (ba.isNotEmpty()) ret.appendFromChars((const char *)ba.data(), ba.size(), __sysoemname__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -319,13 +338,12 @@ PIString PIString::fromConsole(const char * s) {
|
||||
if (!s) return ret;
|
||||
if (s[0] != '\0') ret.appendFromChars(s, -1, __sysoemname__);
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
PIString PIString::fromSystem(const PIByteArray & ba) {
|
||||
PIString ret;
|
||||
if (ba.isNotEmpty()) ret.appendFromChars((const char*)ba.data(), ba.size(), __syslocname__);
|
||||
if (ba.isNotEmpty()) ret.appendFromChars((const char *)ba.data(), ba.size(), __syslocname__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -355,8 +373,8 @@ PIString PIString::fromUTF8(const char * s) {
|
||||
PIString PIString::fromUTF8(const PIByteArray & ba) {
|
||||
PIString ret;
|
||||
if (ba.isNotEmpty()) {
|
||||
const char * data = (const char*)ba.data();
|
||||
int size = ba.size();
|
||||
const char * data = (const char *)ba.data();
|
||||
int size = ba.size();
|
||||
if (ba.size() >= 3) {
|
||||
if (ba[0] == 0xEF && ba[1] == 0xBB && ba[2] == 0xBF) {
|
||||
data += 3;
|
||||
@@ -387,15 +405,19 @@ PIString PIString::fromAscii(const char * s, int len) {
|
||||
|
||||
PIString PIString::fromCodepage(const char * s, const char * c) {
|
||||
PIString ret;
|
||||
if (s[0] > '\0') ret.appendFromChars(s, -1
|
||||
if (s[0] > '\0')
|
||||
ret.appendFromChars(s,
|
||||
-1
|
||||
#ifdef PIP_ICU
|
||||
, c
|
||||
,
|
||||
c
|
||||
#else
|
||||
# ifdef WINDOWS
|
||||
, __utf8name__
|
||||
,
|
||||
__utf8name__
|
||||
# endif
|
||||
#endif
|
||||
);
|
||||
);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -426,9 +448,9 @@ void PIString::buildData(const char * cp) const {
|
||||
UErrorCode e((UErrorCode)0);
|
||||
UConverter * cc = ucnv_open(cp, &e);
|
||||
if (cc) {
|
||||
const size_t len = MB_CUR_MAX*size()+1;
|
||||
data_ = (char *)malloc(len);
|
||||
int sz = ucnv_fromUChars(cc, data_, len, (const UChar*)(d.data()), d.size_s(), &e);
|
||||
const size_t len = MB_CUR_MAX * size() + 1;
|
||||
data_ = (char *)malloc(len);
|
||||
int sz = ucnv_fromUChars(cc, data_, len, (const UChar *)(d.data()), d.size_s(), &e);
|
||||
ucnv_close(cc);
|
||||
data_[sz] = '\0';
|
||||
return;
|
||||
@@ -437,18 +459,18 @@ void PIString::buildData(const char * cp) const {
|
||||
# ifdef WINDOWS
|
||||
int sz = WideCharToMultiByte((uint)(uintptr_t)cp, 0, (LPCWCH)d.data(), d.size_s(), 0, 0, NULL, NULL);
|
||||
if (sz <= 0) {
|
||||
data_ = (char *)malloc(1);
|
||||
data_ = (char *)malloc(1);
|
||||
data_[0] = '\0';
|
||||
return;
|
||||
}
|
||||
data_ = (char *)malloc(sz+1);
|
||||
data_ = (char *)malloc(sz + 1);
|
||||
WideCharToMultiByte((uint)(uintptr_t)cp, 0, (LPCWCH)d.data(), d.size_s(), (LPSTR)data_, sz, NULL, NULL);
|
||||
data_[sz] = '\0';
|
||||
return;
|
||||
# else
|
||||
std::wstring_convert<std::codecvt_utf8<char16_t>, char16_t> ucs2conv;
|
||||
std::string u8str = ucs2conv.to_bytes((char16_t*)d.data(), (char16_t*)d.data() + d.size());
|
||||
data_ = (char *)malloc(u8str.size()+1);
|
||||
std::string u8str = ucs2conv.to_bytes((char16_t *)d.data(), (char16_t *)d.data() + d.size());
|
||||
data_ = (char *)malloc(u8str.size() + 1);
|
||||
strcpy(data_, u8str.c_str());
|
||||
# endif
|
||||
#endif
|
||||
@@ -462,7 +484,7 @@ void PIString::deleteData() const {
|
||||
}
|
||||
|
||||
|
||||
void PIString::trimsubstr(int &st, int &fn) const {
|
||||
void PIString::trimsubstr(int & st, int & fn) const {
|
||||
for (int i = 0; i < d.size_s(); ++i) {
|
||||
if (at(i) != ' ' && at(i) != '\t' && at(i) != '\n' && at(i) != '\r' && at(i) != char(12) && at(i) != uchar(0)) {
|
||||
st = i;
|
||||
@@ -480,7 +502,7 @@ void PIString::trimsubstr(int &st, int &fn) const {
|
||||
|
||||
|
||||
uint PIString::hash() const {
|
||||
return piHashData((const uchar*)d.data(), d.size() * sizeof(PIChar));
|
||||
return piHashData((const uchar *)d.data(), d.size() * sizeof(PIChar));
|
||||
}
|
||||
|
||||
|
||||
@@ -502,13 +524,13 @@ PIByteArray PIString::toCharset(const char * c) const {
|
||||
if (isEmpty()) return PIByteArray();
|
||||
buildData(
|
||||
#ifdef PIP_ICU
|
||||
c
|
||||
c
|
||||
#else
|
||||
# ifdef WINDOWS
|
||||
__utf8name__
|
||||
__utf8name__
|
||||
# endif
|
||||
#endif
|
||||
);
|
||||
);
|
||||
return PIByteArray(data_, strlen(data_));
|
||||
}
|
||||
|
||||
@@ -516,8 +538,7 @@ PIByteArray PIString::toCharset(const char * c) const {
|
||||
PIString PIString::simplified() const {
|
||||
PIString ret(*this);
|
||||
for (int i = 0; i < ret.size_s(); ++i)
|
||||
if (!ret[i].isAscii())
|
||||
ret[i] = '?';
|
||||
if (!ret[i].isAscii()) ret[i] = '?';
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -543,15 +564,15 @@ PIString & PIString::unmask(const PIString & symbols, const PIChar mc) {
|
||||
}
|
||||
|
||||
|
||||
PIString & PIString::operator +=(const char * str) {
|
||||
PIString & PIString::operator+=(const char * str) {
|
||||
if (!str) return *this;
|
||||
appendFromChars(str, -1, __syslocname__);
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
PIString & PIString::operator +=(const PIByteArray & ba) {
|
||||
appendFromChars((const char * )ba.data(), ba.size_s(), __utf8name__);
|
||||
PIString & PIString::operator+=(const PIByteArray & ba) {
|
||||
appendFromChars((const char *)ba.data(), ba.size_s(), __utf8name__);
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -561,7 +582,7 @@ PIString::~PIString() {
|
||||
}
|
||||
|
||||
|
||||
PIString & PIString::operator +=(const wchar_t * str) {
|
||||
PIString & PIString::operator+=(const wchar_t * str) {
|
||||
if (!str) return *this;
|
||||
int i = -1;
|
||||
while (str[++i]) {
|
||||
@@ -571,13 +592,13 @@ PIString & PIString::operator +=(const wchar_t * str) {
|
||||
}
|
||||
|
||||
|
||||
PIString & PIString::operator +=(const PIString & str) {
|
||||
PIString & PIString::operator+=(const PIString & str) {
|
||||
d.append(str.d);
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
PIString & PIString::operator +=(const PIConstChars & str) {
|
||||
PIString & PIString::operator+=(const PIConstChars & str) {
|
||||
if (!str.isEmpty()) {
|
||||
size_t os = d.size();
|
||||
d.enlarge(str.size());
|
||||
@@ -589,37 +610,41 @@ PIString & PIString::operator +=(const PIConstChars & str) {
|
||||
}
|
||||
|
||||
|
||||
bool PIString::operator ==(const PIString & str) const {
|
||||
bool PIString::operator==(const PIString & str) const {
|
||||
return d == str.d;
|
||||
}
|
||||
|
||||
|
||||
bool PIString::operator !=(const PIString & str) const {
|
||||
bool PIString::operator!=(const PIString & str) const {
|
||||
return d != str.d;
|
||||
}
|
||||
|
||||
|
||||
bool PIString::operator <(const PIString & str) const {
|
||||
bool PIString::operator<(const PIString & str) const {
|
||||
size_t l = str.size();
|
||||
if (size() < l) return true;
|
||||
if (size() > l) return false;
|
||||
for (size_t i = 0; i < l; ++i) {
|
||||
if (at(i) == str.at(i)) continue;
|
||||
if (at(i) < str.at(i)) return true;
|
||||
else return false;
|
||||
if (at(i) < str.at(i))
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool PIString::operator >(const PIString & str) const {
|
||||
bool PIString::operator>(const PIString & str) const {
|
||||
size_t l = str.size();
|
||||
if (size() < l) return false;
|
||||
if (size() > l) return true;
|
||||
for (size_t i = 0; i < l; ++i) {
|
||||
if (at(i) == str.at(i)) continue;
|
||||
if (at(i) < str.at(i)) return false;
|
||||
else return true;
|
||||
if (at(i) < str.at(i))
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -874,7 +899,7 @@ PIString & PIString::elide(int size, float pos) {
|
||||
fill('.');
|
||||
return *this;
|
||||
}
|
||||
pos = piClampf(pos, 0.f, 1.f);
|
||||
pos = piClampf(pos, 0.f, 1.f);
|
||||
int ns = size - 2;
|
||||
int ls = piRoundf(ns * pos);
|
||||
d.remove(ls, length() - ns);
|
||||
@@ -964,8 +989,7 @@ int PIString::findLast(const char c, const int start) const {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int PIString::findLast(PIChar c, const int start) const
|
||||
{
|
||||
int PIString::findLast(PIChar c, const int start) const {
|
||||
for (int i = length() - 1; i >= start; --i) {
|
||||
if (at(i) == c) return i;
|
||||
}
|
||||
@@ -1094,14 +1118,18 @@ int PIString::findRange(const PIChar start, const PIChar end, const PIChar shiel
|
||||
continue;
|
||||
}
|
||||
if (trim_) {
|
||||
if (c == ' ' || c == '\t' || c == '\n' || c == '\r')
|
||||
continue;
|
||||
if (c == ' ' || c == '\t' || c == '\n' || c == '\r') continue;
|
||||
trim_ = false;
|
||||
}
|
||||
if (eq) {
|
||||
if (c == start) {
|
||||
if (cnt == 0) ls = i;
|
||||
else {le = i; cnt = 0; break;}
|
||||
if (cnt == 0)
|
||||
ls = i;
|
||||
else {
|
||||
le = i;
|
||||
cnt = 0;
|
||||
break;
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
} else {
|
||||
@@ -1116,7 +1144,7 @@ int PIString::findRange(const PIChar start, const PIChar end, const PIChar shiel
|
||||
}
|
||||
if (cnt <= 0) break;
|
||||
}
|
||||
//piCout << ls << le << cnt;
|
||||
// piCout << ls << le << cnt;
|
||||
if (le < ls || ls < 0 || le < 0 || cnt != 0) return -1;
|
||||
if (len) *len = le - ls - 1;
|
||||
return ls + 1;
|
||||
@@ -1157,9 +1185,9 @@ bool PIString::endsWith(const PIString & str) const {
|
||||
//! \endcode
|
||||
bool PIString::toBool() const {
|
||||
static const PIString s_true = PIStringAscii("true");
|
||||
static const PIString s_yes = PIStringAscii("yes" );
|
||||
static const PIString s_on = PIStringAscii("on" );
|
||||
static const PIString s_ok = PIStringAscii("ok" );
|
||||
static const PIString s_yes = PIStringAscii("yes");
|
||||
static const PIString s_on = PIStringAscii("on");
|
||||
static const PIString s_ok = PIStringAscii("ok");
|
||||
PIString s(*this);
|
||||
s = s.trimmed().toLowerCase();
|
||||
if (s == s_true || s == s_yes || s == s_on || s == s_ok) return true;
|
||||
@@ -1303,7 +1331,7 @@ PIString PIString::takeNumber() {
|
||||
for (int i = 0; i < sz; ++i) {
|
||||
if (phase > 7) break;
|
||||
PIChar c = at(i);
|
||||
//piCout << "char " << c << "phase" << phase;
|
||||
// piCout << "char " << c << "phase" << phase;
|
||||
switch (phase) {
|
||||
case 0: // trim
|
||||
if (c == ' ' || c == '\t' || c == '\n' || c == '\r') {
|
||||
@@ -1312,7 +1340,7 @@ PIString PIString::takeNumber() {
|
||||
phase = 7;
|
||||
case 7: // sign
|
||||
if (c == '-' || c == '+') {
|
||||
ls = i;
|
||||
ls = i;
|
||||
phase = 1;
|
||||
break;
|
||||
}
|
||||
@@ -1320,20 +1348,22 @@ PIString PIString::takeNumber() {
|
||||
if ((c >= '0' && c <= '9') || c == '.') {
|
||||
le = i;
|
||||
if (ls < 0) ls = i;
|
||||
if (c == '.') phase = 3;
|
||||
else phase = 2;
|
||||
if (c == '.')
|
||||
phase = 3;
|
||||
else
|
||||
phase = 2;
|
||||
break;
|
||||
}
|
||||
phase = 9;
|
||||
break;
|
||||
case 2: // integer
|
||||
if (c == '.') {
|
||||
le = i;
|
||||
le = i;
|
||||
phase = 3;
|
||||
break;
|
||||
}
|
||||
if (c == 'e' || c == 'E') {
|
||||
le = i;
|
||||
le = i;
|
||||
phase = 4;
|
||||
break;
|
||||
}
|
||||
@@ -1345,7 +1375,7 @@ PIString PIString::takeNumber() {
|
||||
break;
|
||||
case 3: // point
|
||||
if (c == 'e' || c == 'E') {
|
||||
le = i;
|
||||
le = i;
|
||||
phase = 4;
|
||||
break;
|
||||
}
|
||||
@@ -1357,7 +1387,7 @@ PIString PIString::takeNumber() {
|
||||
break;
|
||||
case 4: // exp
|
||||
if ((c >= '0' && c <= '9') || c == '-' || c == '+') {
|
||||
le = i;
|
||||
le = i;
|
||||
phase = 5;
|
||||
break;
|
||||
}
|
||||
@@ -1379,11 +1409,13 @@ PIString PIString::takeNumber() {
|
||||
break;
|
||||
}
|
||||
if (phase == 6) {
|
||||
if (c == 'f' || c == 's' || c == 'u' || c == 'l' || c == 'L') le = i;
|
||||
else phase = 9;
|
||||
if (c == 'f' || c == 's' || c == 'u' || c == 'l' || c == 'L')
|
||||
le = i;
|
||||
else
|
||||
phase = 9;
|
||||
}
|
||||
}
|
||||
//piCout << ls << le;
|
||||
// piCout << ls << le;
|
||||
if (le < ls) return ret;
|
||||
ret = mid(ls, le - ls + 1);
|
||||
cutLeft(le + 1);
|
||||
@@ -1449,7 +1481,7 @@ PIString PIString::takeRange(const PIChar start, const PIChar end, const PIChar
|
||||
if (cnt == 0) {
|
||||
ls = i;
|
||||
} else {
|
||||
le = i;
|
||||
le = i;
|
||||
cnt = 0;
|
||||
break;
|
||||
}
|
||||
@@ -1467,7 +1499,7 @@ PIString PIString::takeRange(const PIChar start, const PIChar end, const PIChar
|
||||
}
|
||||
if (cnt <= 0) break;
|
||||
}
|
||||
//piCout << ls << le << cnt;
|
||||
// piCout << ls << le << cnt;
|
||||
if (le < ls || ls < 0 || le < 0 || cnt != 0) return ret;
|
||||
ret = mid(ls + 1, le - ls - 1);
|
||||
cutLeft(le + 1);
|
||||
@@ -1493,7 +1525,7 @@ PIString PIString::inBrackets(const PIChar start, const PIChar end) const {
|
||||
}
|
||||
if (cc == end && st >= 0) {
|
||||
bcnt--;
|
||||
if (bcnt == 0) return mid(st+1, i-st-1);
|
||||
if (bcnt == 0) return mid(st + 1, i - st - 1);
|
||||
}
|
||||
}
|
||||
return PIString();
|
||||
@@ -1533,7 +1565,7 @@ const char * PIString::data() const {
|
||||
//! \~\sa \a data(), \a dataUTF8()
|
||||
const char * PIString::dataConsole() const {
|
||||
if (isEmpty()) return "";
|
||||
buildData(__sysoemname__ );
|
||||
buildData(__sysoemname__);
|
||||
return data_;
|
||||
}
|
||||
|
||||
@@ -1568,7 +1600,7 @@ const char * PIString::dataUTF8() const {
|
||||
const char * PIString::dataAscii() const {
|
||||
if (isEmpty()) return "";
|
||||
deleteData();
|
||||
data_ = (char*)malloc(size()+1);
|
||||
data_ = (char *)malloc(size() + 1);
|
||||
for (int i = 0; i < size_s(); ++i) {
|
||||
data_[i] = uchar(at(i).ch);
|
||||
}
|
||||
@@ -1646,7 +1678,7 @@ PIString & PIString::setReadableSize(llong bytes) {
|
||||
return *this;
|
||||
}
|
||||
double fres = bytes / 1024.;
|
||||
llong res = bytes / 1024;
|
||||
llong res = bytes / 1024;
|
||||
fres -= res;
|
||||
if (res < 1024) {
|
||||
*this += (PIString::fromNumber(res) + PIStringAscii(".") + PIString::fromNumber(llong(fres * 10)).left(1) + PIStringAscii(" kB"));
|
||||
@@ -1722,7 +1754,7 @@ void parseVersion(PIString s, PIVector<int> & codes, PIStringList & strs) {
|
||||
strs << comps[i];
|
||||
}
|
||||
}
|
||||
//piCout << codes << strs;
|
||||
// piCout << codes << strs;
|
||||
}
|
||||
|
||||
|
||||
@@ -1742,7 +1774,7 @@ int versionLabelValue(PIString s) {
|
||||
ret += 10000 + s.toInt();
|
||||
}
|
||||
if (s == PIStringAscii("alpha")) ret -= 4;
|
||||
if (s == PIStringAscii("beta" )) ret -= 2;
|
||||
if (s == PIStringAscii("beta")) ret -= 2;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1780,10 +1812,11 @@ int versionLabelValue(PIString s) {
|
||||
//! * 1 - v0 > v1
|
||||
//! * -1 - v0 < v1
|
||||
int versionCompare(const PIString & v0, const PIString & v1, int components) {
|
||||
PIStringList strs[2]; PIVector<int> codes[2];
|
||||
PIStringList strs[2];
|
||||
PIVector<int> codes[2];
|
||||
parseVersion(v0.toLowerCase(), codes[0], strs[0]);
|
||||
parseVersion(v1.toLowerCase(), codes[1], strs[1]);
|
||||
//piCout << codes[0] << strs[0];
|
||||
// piCout << codes[0] << strs[0];
|
||||
int mc = piMaxi(codes[0].size_s(), codes[1].size_s());
|
||||
if (codes[0].size_s() < mc) codes[0].resize(mc, 0);
|
||||
if (codes[1].size_s() < mc) codes[1].resize(mc, 0);
|
||||
@@ -1793,14 +1826,14 @@ int versionCompare(const PIString & v0, const PIString & v1, int components) {
|
||||
int comps = piMini(components, codes[0].size_s(), codes[1].size_s());
|
||||
if (comps < 1) return (v0 == v1 ? 0 : (v0 > v1 ? 1 : -1));
|
||||
for (int c = 0; c < comps; ++c) {
|
||||
if (codes[0][c] > codes[1][c]) return 1;
|
||||
if (codes[0][c] > codes[1][c]) return 1;
|
||||
if (codes[0][c] < codes[1][c]) return -1;
|
||||
}
|
||||
mc = piClampi(mc, 0, components - comps);
|
||||
for (int c = 0; c < mc; ++c) {
|
||||
int lv0 = versionLabelValue(strs[0][c]);
|
||||
int lv1 = versionLabelValue(strs[1][c]);
|
||||
if (lv0 > lv1) return 1;
|
||||
if (lv0 > lv1) return 1;
|
||||
if (lv0 < lv1) return -1;
|
||||
}
|
||||
return 0;
|
||||
@@ -1827,13 +1860,16 @@ int versionCompare(const PIString & v0, const PIString & v1, int components) {
|
||||
//! piCout << versionNormalize("1..4_rc2-999"); // 1.0.4-999_rc2
|
||||
//! \endcode
|
||||
PIString versionNormalize(const PIString & v) {
|
||||
PIStringList strs; PIVector<int> codes;
|
||||
PIStringList strs;
|
||||
PIVector<int> codes;
|
||||
parseVersion(v.toLowerCase(), codes, strs);
|
||||
PIString ret;
|
||||
for (int i = 0; i < codes.size_s(); ++i) {
|
||||
if (i > 0) {
|
||||
if (i < 3) ret += '.';
|
||||
else ret += '-';
|
||||
if (i < 3)
|
||||
ret += '.';
|
||||
else
|
||||
ret += '-';
|
||||
}
|
||||
ret += PIString::fromNumber(codes[i]);
|
||||
}
|
||||
@@ -1843,4 +1879,3 @@ PIString versionNormalize(const PIString & v) {
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,24 +3,24 @@
|
||||
* \brief
|
||||
* \~english String class
|
||||
* \~russian Класс строки
|
||||
*/
|
||||
*/
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
String
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
PIP - Platform Independent Primitives
|
||||
String
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@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 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.
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef PISTRING_H
|
||||
@@ -38,19 +38,19 @@ class PIStringList;
|
||||
//! \~\brief
|
||||
//! \~english String class.
|
||||
//! \~russian Класс строки.
|
||||
class PIP_EXPORT PIString
|
||||
{
|
||||
class PIP_EXPORT PIString {
|
||||
BINARY_STREAM_FRIEND(PIString);
|
||||
|
||||
public:
|
||||
typedef PIDeque<PIChar>::iterator iterator;
|
||||
typedef PIDeque<PIChar>::const_iterator const_iterator;
|
||||
typedef PIDeque<PIChar>::reverse_iterator reverse_iterator;
|
||||
typedef PIDeque<PIChar>::const_reverse_iterator const_reverse_iterator;
|
||||
typedef PIChar value_type;
|
||||
typedef PIChar* pointer;
|
||||
typedef const PIChar* const_pointer;
|
||||
typedef PIChar& reference;
|
||||
typedef const PIChar& const_reference;
|
||||
typedef PIChar * pointer;
|
||||
typedef const PIChar * const_pointer;
|
||||
typedef PIChar & reference;
|
||||
typedef const PIChar & const_reference;
|
||||
typedef size_t size_type;
|
||||
|
||||
//! \~english Contructs an empty string.
|
||||
@@ -59,7 +59,7 @@ public:
|
||||
|
||||
//! \~english Value for elide at left.
|
||||
//! \~russian Значение для пропуска слева.
|
||||
static const float ElideLeft ;
|
||||
static const float ElideLeft;
|
||||
|
||||
//! \~english Value for elide at center.
|
||||
//! \~russian Значение для пропуска в середине.
|
||||
@@ -67,52 +67,58 @@ public:
|
||||
|
||||
//! \~english Value for elide at right.
|
||||
//! \~russian Значение для пропуска справа.
|
||||
static const float ElideRight ;
|
||||
static const float ElideRight;
|
||||
|
||||
PIString & operator +=(const PIChar & c) {d.push_back(c); return *this;}
|
||||
PIString & operator +=(const char c) {d.push_back(PIChar(c)); return *this;}
|
||||
PIString & operator +=(const char * str);
|
||||
PIString & operator +=(const wchar_t * str);
|
||||
PIString & operator +=(const PIByteArray & ba);
|
||||
PIString & operator +=(const PIString & str);
|
||||
PIString & operator +=(const PIConstChars & str);
|
||||
PIString & operator+=(const PIChar & c) {
|
||||
d.push_back(c);
|
||||
return *this;
|
||||
}
|
||||
PIString & operator+=(const char c) {
|
||||
d.push_back(PIChar(c));
|
||||
return *this;
|
||||
}
|
||||
PIString & operator+=(const char * str);
|
||||
PIString & operator+=(const wchar_t * str);
|
||||
PIString & operator+=(const PIByteArray & ba);
|
||||
PIString & operator+=(const PIString & str);
|
||||
PIString & operator+=(const PIConstChars & str);
|
||||
|
||||
PIString(uchar ) = delete;
|
||||
PIString( short) = delete;
|
||||
PIString(ushort) = delete;
|
||||
PIString( int ) = delete;
|
||||
PIString(uint ) = delete;
|
||||
PIString( long ) = delete;
|
||||
PIString(ulong ) = delete;
|
||||
PIString( llong) = delete;
|
||||
PIString(ullong) = delete;
|
||||
PIString(uchar) = delete;
|
||||
PIString(short) = delete;
|
||||
PIString(ushort) = delete;
|
||||
PIString(int) = delete;
|
||||
PIString(uint) = delete;
|
||||
PIString(long) = delete;
|
||||
PIString(ulong) = delete;
|
||||
PIString(llong) = delete;
|
||||
PIString(ullong) = delete;
|
||||
|
||||
PIString & operator +=(uchar ) = delete;
|
||||
PIString & operator +=( short) = delete;
|
||||
PIString & operator +=(ushort) = delete;
|
||||
PIString & operator +=( int ) = delete;
|
||||
PIString & operator +=(uint ) = delete;
|
||||
PIString & operator +=( long ) = delete;
|
||||
PIString & operator +=(ulong ) = delete;
|
||||
PIString & operator +=( llong) = delete;
|
||||
PIString & operator +=(ullong) = delete;
|
||||
PIString & operator+=(uchar) = delete;
|
||||
PIString & operator+=(short) = delete;
|
||||
PIString & operator+=(ushort) = delete;
|
||||
PIString & operator+=(int) = delete;
|
||||
PIString & operator+=(uint) = delete;
|
||||
PIString & operator+=(long) = delete;
|
||||
PIString & operator+=(ulong) = delete;
|
||||
PIString & operator+=(llong) = delete;
|
||||
PIString & operator+=(ullong) = delete;
|
||||
|
||||
//! \~english Contructs a copy of string.
|
||||
//! \~russian Создает копию строки.
|
||||
PIString(const PIString & o) {d = o.d;}
|
||||
PIString(const PIString & o) { d = o.d; }
|
||||
|
||||
//! \~english Move constructor.
|
||||
//! \~russian Перемещающий конструктор.
|
||||
PIString(PIString && o): d(std::move(o.d)) {piSwap(data_, o.data_);}
|
||||
PIString(PIString && o): d(std::move(o.d)) { piSwap(data_, o.data_); }
|
||||
|
||||
//! \~english Contructs string with single character "c".
|
||||
//! \~russian Создает строку из одного символа "c".
|
||||
PIString(const PIChar c) {d.push_back(c);}
|
||||
PIString(const PIChar c) { d.push_back(c); }
|
||||
|
||||
//! \~english Contructs string with single character "c".
|
||||
//! \~russian Создает строку из одного символа "c".
|
||||
PIString(const char c) {d.push_back(PIChar(c));}
|
||||
|
||||
PIString(const char c) { d.push_back(PIChar(c)); }
|
||||
|
||||
//! \~english Contructs string from C-string "str" (system codepage).
|
||||
//! \~russian Создает строку из C-строки "str" (кодировка системы).
|
||||
//! \~\details
|
||||
@@ -123,8 +129,8 @@ public:
|
||||
//! \~\code
|
||||
//! PIString s("string");
|
||||
//! \endcode
|
||||
PIString(const char * str) {*this += str;}
|
||||
|
||||
PIString(const char * str) { *this += str; }
|
||||
|
||||
//! \~english Contructs string from \c wchar_t C-string "str".
|
||||
//! \~russian Создает строку из \c wchar_t C-строки "str".
|
||||
//! \~\details
|
||||
@@ -135,11 +141,11 @@ public:
|
||||
//! \~\code
|
||||
//! PIString s(L"string");
|
||||
//! \endcode
|
||||
PIString(const wchar_t * str) {*this += str;}
|
||||
PIString(const wchar_t * str) { *this += str; }
|
||||
|
||||
//! \~english Contructs string from byte array "ba" (as UTF-8).
|
||||
//! \~russian Создает строку из байтового массива "ba" (как UTF-8).
|
||||
PIString(const PIByteArray & ba) {*this += ba;}
|
||||
PIString(const PIByteArray & ba) { *this += ba; }
|
||||
|
||||
//! \~english Contructs string from "len" characters of buffer "str".
|
||||
//! \~russian Создает строку из "len" символов массива "str".
|
||||
@@ -151,7 +157,7 @@ public:
|
||||
//! \~\code
|
||||
//! PIString s("string", 3); // s = "str"
|
||||
//! \endcode
|
||||
PIString(const char * str, const int len) {appendFromChars(str, len);}
|
||||
PIString(const char * str, const int len) { appendFromChars(str, len); }
|
||||
|
||||
//! \~english Contructs string as sequence of characters "c" of buffer with length "len".
|
||||
//! \~russian Создает строку как последовательность длиной "len" символа "c".
|
||||
@@ -159,7 +165,10 @@ public:
|
||||
//! \~\code
|
||||
//! PIString s(5, 'p'); // s = "ppppp"
|
||||
//! \endcode
|
||||
PIString(const int len, const char c) {for (int i = 0; i < len; ++i) d.push_back(PIChar(c));}
|
||||
PIString(const int len, const char c) {
|
||||
for (int i = 0; i < len; ++i)
|
||||
d.push_back(PIChar(c));
|
||||
}
|
||||
|
||||
//! \~english Contructs string as sequence of characters "c" of buffer with length "len".
|
||||
//! \~russian Создает строку как последовательность длиной "len" символа "c".
|
||||
@@ -167,116 +176,147 @@ public:
|
||||
//! \~\code
|
||||
//! PIString s(5, "№"); // s = "№№№№№"
|
||||
//! \endcode
|
||||
PIString(const int len, const PIChar c) {for (int i = 0; i < len; ++i) d.push_back(c);}
|
||||
PIString(const int len, const PIChar c) {
|
||||
for (int i = 0; i < len; ++i)
|
||||
d.push_back(c);
|
||||
}
|
||||
|
||||
PIString(const PIConstChars & c) { *this += c; }
|
||||
|
||||
PIString(const PIConstChars & c) {*this += c;}
|
||||
|
||||
~PIString();
|
||||
|
||||
//! \~english Assign operator.
|
||||
//! \~russian Оператор присваивания.
|
||||
PIString & operator =(const PIString & o) {if (this == &o) return *this; d = o.d; return *this;}
|
||||
PIString & operator=(const PIString & o) {
|
||||
if (this == &o) return *this;
|
||||
d = o.d;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Assign move operator.
|
||||
//! \~russian Оператор перемещающего присваивания.
|
||||
PIString & operator =(PIString && o) {d.swap(o.d); piSwap(data_, o.data_); return *this;}
|
||||
PIString & operator=(PIString && o) {
|
||||
d.swap(o.d);
|
||||
piSwap(data_, o.data_);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Assign operator.
|
||||
//! \~russian Оператор присваивания.
|
||||
PIString & operator =(const PIConstChars & o) {d.clear(); *this += o; return *this;}
|
||||
PIString & operator=(const PIConstChars & o) {
|
||||
d.clear();
|
||||
*this += o;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Assign operator.
|
||||
//! \~russian Оператор присваивания.
|
||||
PIString & operator =(const char * o) {d.clear(); *this += o; return *this;}
|
||||
PIString & operator=(const char * o) {
|
||||
d.clear();
|
||||
*this += o;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator ==(const PIString & str) const;
|
||||
bool operator==(const PIString & str) const;
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator ==(const PIChar c) const {if (d.size() != 1) return false; return d.at(0) == c;}
|
||||
bool operator==(const PIChar c) const {
|
||||
if (d.size() != 1) return false;
|
||||
return d.at(0) == c;
|
||||
}
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator ==(const char * str) const {return *this == PIString(str);}
|
||||
bool operator==(const char * str) const { return *this == PIString(str); }
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator !=(const PIString & str) const;
|
||||
bool operator!=(const PIString & str) const;
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator !=(const PIChar c) const {if (d.size() != 1) return true; return d.at(0) != c;}
|
||||
bool operator!=(const PIChar c) const {
|
||||
if (d.size() != 1) return true;
|
||||
return d.at(0) != c;
|
||||
}
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator !=(const char * str) const {return *this != PIString(str);}
|
||||
bool operator!=(const char * str) const { return *this != PIString(str); }
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator <(const PIString & str) const;
|
||||
bool operator<(const PIString & str) const;
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator <(const PIChar c) const {if (d.size() != 1) return d.size() < 1; return d.at(0) < c;}
|
||||
bool operator<(const PIChar c) const {
|
||||
if (d.size() != 1) return d.size() < 1;
|
||||
return d.at(0) < c;
|
||||
}
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator <(const char * str) const {return *this < PIString(str);}
|
||||
bool operator<(const char * str) const { return *this < PIString(str); }
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator >(const PIString & str) const;
|
||||
bool operator>(const PIString & str) const;
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator >(const PIChar c) const {if (d.size() != 1) return d.size() > 1; return d.at(0) > c;}
|
||||
bool operator>(const PIChar c) const {
|
||||
if (d.size() != 1) return d.size() > 1;
|
||||
return d.at(0) > c;
|
||||
}
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator >(const char * str) const {return *this > PIString(str);}
|
||||
bool operator>(const char * str) const { return *this > PIString(str); }
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator <=(const PIString & str) const {return !(*this > str);}
|
||||
bool operator<=(const PIString & str) const { return !(*this > str); }
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator <=(const PIChar c) const {return !(*this > c);}
|
||||
bool operator<=(const PIChar c) const { return !(*this > c); }
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator <=(const char * str) const {return *this <= PIString(str);}
|
||||
bool operator<=(const char * str) const { return *this <= PIString(str); }
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator >=(const PIString & str) const {return !(*this < str);}
|
||||
bool operator>=(const PIString & str) const { return !(*this < str); }
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator >=(const PIChar c) const {return !(*this < c);}
|
||||
bool operator>=(const PIChar c) const { return !(*this < c); }
|
||||
|
||||
//! \~english Compare operator.
|
||||
//! \~russian Оператор сравнения.
|
||||
bool operator >=(const char * str) const {return *this >= PIString(str);}
|
||||
bool operator>=(const char * str) const { return *this >= PIString(str); }
|
||||
|
||||
//! \~english Iterator to the first element.
|
||||
//! \~russian Итератор на первый элемент.
|
||||
//! \~\details
|
||||
//! \~\return \ref stl_iterators
|
||||
//! \~\sa \a end(), \a rbegin(), \a rend()
|
||||
inline iterator begin() {return d.begin();}
|
||||
inline iterator begin() { return d.begin(); }
|
||||
|
||||
//! \~english Iterator to the element following the last element.
|
||||
//! \~russian Итератор на элемент, следующий за последним элементом.
|
||||
//! \~\details
|
||||
//! \~\return \ref stl_iterators
|
||||
//! \~\sa \a begin(), \a rbegin(), \a rend()
|
||||
inline iterator end() {return d.end();}
|
||||
inline iterator end() { return d.end(); }
|
||||
|
||||
inline const_iterator begin() const {return d.begin();}
|
||||
inline const_iterator end() const {return d.end();}
|
||||
inline const_iterator begin() const { return d.begin(); }
|
||||
inline const_iterator end() const { return d.end(); }
|
||||
|
||||
//! \~english Returns a reverse iterator to the first element of the reversed array.
|
||||
//! \~russian Обратный итератор на первый элемент.
|
||||
@@ -286,7 +326,7 @@ public:
|
||||
//! Указывает на последний элемент.
|
||||
//! \~\return \ref stl_iterators
|
||||
//! \~\sa \a rend(), \a begin(), \a end()
|
||||
inline reverse_iterator rbegin() {return d.rbegin();}
|
||||
inline reverse_iterator rbegin() { return d.rbegin(); }
|
||||
|
||||
//! \~english Returns a reverse iterator to the element.
|
||||
//! following the last element of the reversed array.
|
||||
@@ -297,10 +337,10 @@ public:
|
||||
//! Указывает на элемент, предшествующий первому элементу.
|
||||
//! \~\return \ref stl_iterators
|
||||
//! \~\sa \a rbegin(), \a begin(), \a end()
|
||||
inline reverse_iterator rend() {return d.rend();}
|
||||
inline reverse_iterator rend() { return d.rend(); }
|
||||
|
||||
inline const_reverse_iterator rbegin() const {return d.rbegin();}
|
||||
inline const_reverse_iterator rend() const {return d.rend();}
|
||||
inline const_reverse_iterator rbegin() const { return d.rbegin(); }
|
||||
inline const_reverse_iterator rend() const { return d.rend(); }
|
||||
|
||||
//! \~english Full access to character by `index`.
|
||||
//! \~russian Полный доступ к символу по индексу `index`.
|
||||
@@ -311,8 +351,8 @@ public:
|
||||
//! \~russian Индекс элемента считается от `0`.
|
||||
//! Индекс символа должен лежать в пределах от `0` до `size()-1`.
|
||||
//! Иначе это приведёт к неопределённому поведению программы и ошибкам памяти.
|
||||
inline PIChar & operator [](size_t index) {return d[index];}
|
||||
inline PIChar operator [](size_t index) const {return d[index];}
|
||||
inline PIChar & operator[](size_t index) { return d[index]; }
|
||||
inline PIChar operator[](size_t index) const { return d[index]; }
|
||||
|
||||
//! \~english Read only access to character by `index`.
|
||||
//! \~russian Доступ исключительно на чтение к символу по индексу `index`.
|
||||
@@ -323,15 +363,15 @@ public:
|
||||
//! \~russian Индекс символа считается от `0`.
|
||||
//! Индекс символа должен лежать в пределах от `0` до `size()-1`.
|
||||
//! Иначе это приведёт к неопределённому поведению программы и ошибкам памяти.
|
||||
inline const PIChar at(size_t index) const {return d.at(index);}
|
||||
inline const PIChar at(size_t index) const { return d.at(index); }
|
||||
|
||||
//! \~english Returns the last character of the string.
|
||||
//! \~russian Возвращает последний символ строки.
|
||||
inline PIChar & back() {return d.back();}
|
||||
inline PIChar back() const {return d.back();}
|
||||
inline PIChar & back() { return d.back(); }
|
||||
inline PIChar back() const { return d.back(); }
|
||||
|
||||
inline PIChar & front() {return d.front();}
|
||||
inline PIChar front() const {return d.front();}
|
||||
inline PIChar & front() { return d.front(); }
|
||||
inline PIChar front() const { return d.front(); }
|
||||
|
||||
//! \~english Sets size of the string, new characters are copied from `c`.
|
||||
//! \~russian Устанавливает размер строки, новые символы копируются из `c`.
|
||||
@@ -344,101 +384,170 @@ public:
|
||||
//! Если `new_size` меньше чем текущий размер строки \a size(),
|
||||
//! лишние символы удаляются с конца строки.
|
||||
//! \~\sa \a size(), \a clear()
|
||||
inline PIString & resize(size_t new_size, PIChar c = PIChar()) {d.resize(new_size, c); return *this;}
|
||||
inline PIString & resize(size_t new_size, PIChar c = PIChar()) {
|
||||
d.resize(new_size, c);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Delete one character at the end of string.
|
||||
//! \~russian Удаляет один символ с конца строки.
|
||||
inline PIString & pop_back() {d.pop_back(); return *this;}
|
||||
inline PIString & pop_back() {
|
||||
d.pop_back();
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Delete one character at the benig of string.
|
||||
//! \~russian Удаляет один символ с начала строки.
|
||||
inline PIString & pop_front() {d.pop_front(); return *this;}
|
||||
inline PIString & pop_front() {
|
||||
d.pop_front();
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Removes `count` characters from the string, starting at `index` position.
|
||||
//! \~russian Удаляет символы из строки, начиная с позиции `index` в количестве `count`.
|
||||
inline PIString & remove(size_t index, size_t count = 1) {d.remove(index, count); return *this;}
|
||||
inline PIString & remove(size_t index, size_t count = 1) {
|
||||
d.remove(index, count);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Assigns character 'c' to all string characters.
|
||||
//! \~russian Заполняет всю строку символами `c`.
|
||||
inline PIString & fill(PIChar c = PIChar()) {d.fill(c); return *this;}
|
||||
inline PIString & fill(PIChar c = PIChar()) {
|
||||
d.fill(c);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert string "str" at the begin of string.
|
||||
//! \~russian Вставляет "str" в начало строки.
|
||||
PIString & prepend(const char * str) {insert(0, str); return *this;}
|
||||
|
||||
//! \~english Insert string "str" at the begin of string.
|
||||
//! \~russian Вставляет "str" в начало строки.
|
||||
PIString & prepend(const PIString & str) {d.prepend(str.d); return *this;}
|
||||
|
||||
//! \~english Insert character `c` at the begin of string.
|
||||
//! \~russian Вставляет символ `c` в начало строки.
|
||||
PIString & prepend(const PIChar c) {d.prepend(c); return *this;}
|
||||
|
||||
//! \~english Insert character `c` at the begin of string.
|
||||
//! \~russian Вставляет символ `c` в начало строки.
|
||||
PIString & prepend(const char c) {d.prepend(PIChar(c)); return *this;}
|
||||
PIString & prepend(const char * str) {
|
||||
insert(0, str);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert string "str" at the begin of string.
|
||||
//! \~russian Вставляет "str" в начало строки.
|
||||
PIString & push_front(const char * str) {insert(0, str); return *this;}
|
||||
PIString & prepend(const PIString & str) {
|
||||
d.prepend(str.d);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert character `c` at the begin of string.
|
||||
//! \~russian Вставляет символ `c` в начало строки.
|
||||
PIString & prepend(const PIChar c) {
|
||||
d.prepend(c);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert character `c` at the begin of string.
|
||||
//! \~russian Вставляет символ `c` в начало строки.
|
||||
PIString & prepend(const char c) {
|
||||
d.prepend(PIChar(c));
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert string "str" at the begin of string.
|
||||
//! \~russian Вставляет "str" в начало строки.
|
||||
PIString & push_front(const PIString & str) {d.push_front(str.d); return *this;}
|
||||
PIString & push_front(const char * str) {
|
||||
insert(0, str);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert string "str" at the begin of string.
|
||||
//! \~russian Вставляет "str" в начало строки.
|
||||
PIString & push_front(const PIString & str) {
|
||||
d.push_front(str.d);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert character `c` at the begin of string.
|
||||
//! \~russian Вставляет символ `c` в начало строки.
|
||||
PIString & push_front(const PIChar c) {d.push_front(c); return *this;}
|
||||
PIString & push_front(const PIChar c) {
|
||||
d.push_front(c);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert character `c` at the begin of string.
|
||||
//! \~russian Вставляет символ `c` в начало строки.
|
||||
PIString & push_front(const char c) {d.push_front(PIChar(c)); return *this;}
|
||||
PIString & push_front(const char c) {
|
||||
d.push_front(PIChar(c));
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert string "str" at the end of string.
|
||||
//! \~russian Вставляет "str" в конец строки.
|
||||
PIString & append(const char * str) {*this += str; return *this;}
|
||||
PIString & append(const char * str) {
|
||||
*this += str;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert string "str" at the end of string.
|
||||
//! \~russian Вставляет "str" в конец строки.
|
||||
PIString & append(const PIString & str) {d.append(str.d); return *this;}
|
||||
PIString & append(const PIString & str) {
|
||||
d.append(str.d);
|
||||
return *this;
|
||||
}
|
||||
|
||||
PIString & append(const PIConstChars & str) {*this += str; return *this;}
|
||||
PIString & append(const PIConstChars & str) {
|
||||
*this += str;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert character `c` at the end of string.
|
||||
//! \~russian Вставляет символ `c` в конец строки.
|
||||
PIString & append(const PIChar c) {d.append(c); return *this;}
|
||||
PIString & append(const PIChar c) {
|
||||
d.append(c);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert character `c` at the end of string.
|
||||
//! \~russian Вставляет символ `c` в конец строки.
|
||||
PIString & append(const char c) {d.append(PIChar(c)); return *this;}
|
||||
PIString & append(const char c) {
|
||||
d.append(PIChar(c));
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert string "str" at the end of string.
|
||||
//! \~russian Вставляет "str" в конец строки.
|
||||
PIString & push_back(const char * str) {*this += str; return *this;}
|
||||
PIString & push_back(const char * str) {
|
||||
*this += str;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert string "str" at the end of string.
|
||||
//! \~russian Вставляет "str" в конец строки.
|
||||
PIString & push_back(const PIString & str) {d.push_back(str.d); return *this;}
|
||||
PIString & push_back(const PIString & str) {
|
||||
d.push_back(str.d);
|
||||
return *this;
|
||||
}
|
||||
|
||||
PIString & push_back(const PIConstChars & str) {*this += str; return *this;}
|
||||
PIString & push_back(const PIConstChars & str) {
|
||||
*this += str;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert character `c` at the end of string.
|
||||
//! \~russian Вставляет символ `c` в конец строки.
|
||||
PIString & push_back(const PIChar c) {d.push_back(c); return *this;}
|
||||
PIString & push_back(const PIChar c) {
|
||||
d.push_back(c);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert character `c` at the end of string.
|
||||
//! \~russian Вставляет символ `c` в конец строки.
|
||||
PIString & push_back(const char c) {d.push_back(PIChar(c)); return *this;}
|
||||
PIString & push_back(const char c) {
|
||||
d.push_back(PIChar(c));
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//! \~english Returns part of string from character at index "start" and maximum length "len".
|
||||
//! \~russian Возвращает подстроку от символа "start" и максимальной длиной "len".
|
||||
PIString mid(int start, int len = -1) const;
|
||||
|
||||
//! \~english Synonym of \a mid().
|
||||
//! \~russian Аналог \a mid().
|
||||
PIString subString(int start, int len = -1) const {return mid(start, len);}
|
||||
|
||||
PIString subString(int start, int len = -1) const { return mid(start, len); }
|
||||
|
||||
//! \~english Returns part of string from start and maximum length "len".
|
||||
//! \~russian Возвращает подстроку от начала и максимальной длиной "len".
|
||||
//! \~\details
|
||||
@@ -450,8 +559,8 @@ public:
|
||||
//! piCout << s.left(15); // s = "0123456789"
|
||||
//! \endcode
|
||||
//! \~\sa \a mid(), \a right()
|
||||
PIString left(int len) const {return len <= 0 ? PIString() : mid(0, len);}
|
||||
|
||||
PIString left(int len) const { return len <= 0 ? PIString() : mid(0, len); }
|
||||
|
||||
//! \~english Returns part of string at end and maximum length "len".
|
||||
//! \~russian Возвращает подстроку максимальной длиной "len" и до конца.
|
||||
//! \~\details
|
||||
@@ -463,12 +572,12 @@ public:
|
||||
//! piCout << s.right(15); // s = "0123456789"
|
||||
//! \endcode
|
||||
//! \~\sa \a mid(), \a left()
|
||||
PIString right(int len) const {return len <= 0 ? PIString() : mid(size() - len, len);}
|
||||
|
||||
PIString right(int len) const { return len <= 0 ? PIString() : mid(size() - len, len); }
|
||||
|
||||
//! \~english Remove part of string from character as index "start" and maximum length "len" and return this string.
|
||||
//! \~russian Удаляет часть строки от символа "start" и максимальной длины "len", возвращает эту строку.
|
||||
PIString & cutMid(int start, int len);
|
||||
|
||||
|
||||
//! \~english Remove part of string from start and maximum length "len" and return this string.
|
||||
//! \~russian Удаляет часть строки от начала и максимальной длины "len", возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -482,8 +591,8 @@ public:
|
||||
//! piCout << s; // s = ""
|
||||
//! \endcode
|
||||
//! \~\sa \a cutMid(), \a cutRight()
|
||||
PIString & cutLeft(int len) {return len <= 0 ? *this : cutMid(0, len);}
|
||||
|
||||
PIString & cutLeft(int len) { return len <= 0 ? *this : cutMid(0, len); }
|
||||
|
||||
//! \~english Remove part of string at end and maximum length "len" and return this string.
|
||||
//! \~russian Удаляет часть строки максимальной длины "len" от конца, возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -497,7 +606,7 @@ public:
|
||||
//! piCout << s; // s = ""
|
||||
//! \endcode
|
||||
//! \~\sa \a cutMid(), \a cutLeft()
|
||||
PIString & cutRight(int len) {return len <= 0 ? *this : cutMid(size() - len, len);}
|
||||
PIString & cutRight(int len) { return len <= 0 ? *this : cutMid(size() - len, len); }
|
||||
|
||||
//! \~english Remove spaces at the start and at the end of string and return this string.
|
||||
//! \~russian Удаляет пробельные символы с начала и конца строки и возвращает эту строку.
|
||||
@@ -512,12 +621,12 @@ public:
|
||||
//! piCout << s; // s = " string "
|
||||
//! \endcode
|
||||
//! \~\sa \a trim()
|
||||
PIString trimmed() const;
|
||||
|
||||
PIString trimmed() const;
|
||||
|
||||
//! \~english Replace part of string from index "from" and maximum length "len" with string "with" and return this string.
|
||||
//! \~russian Заменяет часть строки от символа "from" и максимальной длины "len" строкой "with", возвращает эту строку.
|
||||
PIString & replace(const int from, const int count, const PIString & with);
|
||||
|
||||
|
||||
//! \~english Replace part copy of this string from index "from" and maximum length "len" with string "with".
|
||||
//! \~russian Заменяет часть копии этой строки от символа "from" и максимальной длины "len" строкой "with".
|
||||
//! \~\details
|
||||
@@ -527,12 +636,16 @@ public:
|
||||
//! piCout << s.replaced(0, 1, "one_"); // s = "one_123456789"
|
||||
//! \endcode
|
||||
//! \~\sa \a replace(), \a replaceAll()
|
||||
PIString replaced(const int from, const int count, const PIString & with) const {PIString str(*this); str.replace(from, count, with); return str;}
|
||||
|
||||
PIString replaced(const int from, const int count, const PIString & with) const {
|
||||
PIString str(*this);
|
||||
str.replace(from, count, with);
|
||||
return str;
|
||||
}
|
||||
|
||||
//! \~english Replace first founded substring "what" with string "with" and return this string.
|
||||
//! \~russian Заменяет первую найденную подстроку "what" строкой "with", возвращает эту строку.
|
||||
PIString & replace(const PIString & what, const PIString & with, bool * ok = 0);
|
||||
|
||||
|
||||
//! \~english Replace in string copy first founded substring "what" with string "with".
|
||||
//! \~russian Заменяет в копии строки первую найденную подстроку "what" строкой "with".
|
||||
//! \~\details
|
||||
@@ -545,8 +658,12 @@ public:
|
||||
//! piCout << s.replace("PIP", "PlInPr", &ok); // s = "pip string", false
|
||||
//! \endcode
|
||||
//! \~\sa \a replaced(), \a replaceAll()
|
||||
PIString replaced(const PIString & what, const PIString & with, bool * ok = 0) const {PIString str(*this); str.replace(what, with, ok); return str;}
|
||||
|
||||
PIString replaced(const PIString & what, const PIString & with, bool * ok = 0) const {
|
||||
PIString str(*this);
|
||||
str.replace(what, with, ok);
|
||||
return str;
|
||||
}
|
||||
|
||||
//! \~english Replace all founded substrings "what" with strings "with" and return this string.
|
||||
//! \~russian Заменяет все найденные подстроки "what" строками "with", возвращает эту строку.
|
||||
PIString & replaceAll(const PIString & what, const PIString & with);
|
||||
@@ -562,17 +679,29 @@ public:
|
||||
//! \~english Replace all founded substrings "what" with strings "with" in string copy.
|
||||
//! \~russian Заменяет в копии строки все найденные подстроки "what" строками "with".
|
||||
//! \~\sa \a replaceAll()
|
||||
PIString replacedAll(const PIString & what, const PIString & with) const {PIString str(*this); str.replaceAll(what, with); return str;}
|
||||
PIString replacedAll(const PIString & what, const PIString & with) const {
|
||||
PIString str(*this);
|
||||
str.replaceAll(what, with);
|
||||
return str;
|
||||
}
|
||||
|
||||
//! \~english Replace all founded substrings "what" with characters "with" in string copy.
|
||||
//! \~russian Заменяет в копии строки все найденные подстроки "what" символами "with".
|
||||
//! \~\sa \a replaceAll()
|
||||
PIString replacedAll(const PIString & what, const char with) const {PIString str(*this); str.replaceAll(what, with); return str;}
|
||||
PIString replacedAll(const PIString & what, const char with) const {
|
||||
PIString str(*this);
|
||||
str.replaceAll(what, with);
|
||||
return str;
|
||||
}
|
||||
|
||||
//! \~english Replace all founded characters "what" with characters "with" in string copy.
|
||||
//! \~russian Заменяет в копии строки все найденные символы "what" символами "with".
|
||||
//! \~\sa \a replaceAll()
|
||||
PIString replacedAll(const char what, const char with) const {PIString str(*this); str.replaceAll(what, with); return str;}
|
||||
PIString replacedAll(const char what, const char with) const {
|
||||
PIString str(*this);
|
||||
str.replaceAll(what, with);
|
||||
return str;
|
||||
}
|
||||
|
||||
//! \~english Remove all founded substrings "what" and return this string.
|
||||
//! \~russian Удаляет все найденные подстроки "what", возвращает эту строку.
|
||||
@@ -580,7 +709,10 @@ public:
|
||||
|
||||
//! \~english Remove all founded characters "what" and return this string.
|
||||
//! \~russian Удаляет все найденные символы "what", возвращает эту строку.
|
||||
PIString & removeAll(char c) {d.removeAll(PIChar(c)); return *this;}
|
||||
PIString & removeAll(char c) {
|
||||
d.removeAll(PIChar(c));
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Repeat content of string "times" times and return this string.
|
||||
//! \~russian Повторяет содержимое строки "times" раз и возвращает эту строку.
|
||||
@@ -591,8 +723,13 @@ public:
|
||||
//! piCout << s; // :-) :-) :-)
|
||||
//! \endcode
|
||||
//! \~\sa \a repeated()
|
||||
PIString & repeat(int times) {PIString ss(*this); times--; piForTimes (times) *this += ss; return *this;}
|
||||
|
||||
PIString & repeat(int times) {
|
||||
PIString ss(*this);
|
||||
times--;
|
||||
piForTimes(times) * this += ss;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Returns repeated "times" times string.
|
||||
//! \~russian Возвращает повторённую "times" раз строку.
|
||||
//! \~\details
|
||||
@@ -602,8 +739,11 @@ public:
|
||||
//! piCout << s; // :-)
|
||||
//! \endcode
|
||||
//! \~\sa \a repeat()
|
||||
PIString repeated(int times) const {PIString ss(*this); return ss.repeat(times);}
|
||||
|
||||
PIString repeated(int times) const {
|
||||
PIString ss(*this);
|
||||
return ss.repeat(times);
|
||||
}
|
||||
|
||||
//! \~english Insert character "c" after index "index" and return this string.
|
||||
//! \~russian Вставляет символ "c" после позиции "index" и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -612,8 +752,11 @@ public:
|
||||
//! s.insert(1, "i");
|
||||
//! piCout << s; // s = "pip"
|
||||
//! \endcode
|
||||
PIString & insert(const int index, const PIChar c) {d.insert(index, c); return *this;}
|
||||
|
||||
PIString & insert(const int index, const PIChar c) {
|
||||
d.insert(index, c);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Insert character "c" after index "index" and return this string.
|
||||
//! \~russian Вставляет символ "c" после позиции "index" и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -622,8 +765,8 @@ public:
|
||||
//! s.insert(1, 'i');
|
||||
//! piCout << s; // s = "pip"
|
||||
//! \endcode
|
||||
PIString & insert(const int index, const char c) {return insert(index, PIChar(c));}
|
||||
|
||||
PIString & insert(const int index, const char c) { return insert(index, PIChar(c)); }
|
||||
|
||||
//! \~english Insert string "str" after index "index" and return this string.
|
||||
//! \~russian Вставляет строку "str" после позиции "index" и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -633,7 +776,7 @@ public:
|
||||
//! piCout << s; // s = "string"
|
||||
//! \endcode
|
||||
PIString & insert(const int index, const PIString & str);
|
||||
|
||||
|
||||
//! \~english Insert string "str" after index "index" and return this string.
|
||||
//! \~russian Вставляет строку "str" после позиции "index" и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -642,8 +785,8 @@ public:
|
||||
//! s.insert(2, "rin");
|
||||
//! piCout << s; // s = "string"
|
||||
//! \endcode
|
||||
PIString & insert(const int index, const char * c) {return insert(index, PIString(c));}
|
||||
|
||||
PIString & insert(const int index, const char * c) { return insert(index, PIString(c)); }
|
||||
|
||||
//! \~english Enlarge string to length "len" by addition characters "c" at the end, and return this string.
|
||||
//! \~russian Увеличивает длину строки до "len" добавлением символов "c" в конец и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -655,8 +798,11 @@ public:
|
||||
//! piCout << s; // s = "str___"
|
||||
//! \endcode
|
||||
//! \~\sa \a expandLeftTo(), \a expandedRightTo(), \a expandedLeftTo()
|
||||
PIString & expandRightTo(const int len, const PIChar c) {if (len > d.size_s()) d.resize(len, c); return *this;}
|
||||
|
||||
PIString & expandRightTo(const int len, const PIChar c) {
|
||||
if (len > d.size_s()) d.resize(len, c);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Enlarge string to length "len" by addition characters "c" at the begin, and return this string.
|
||||
//! \~russian Увеличивает длину строки до "len" добавлением символов "c" в начало и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -668,7 +814,10 @@ public:
|
||||
//! piCout << s; // s = "___str"
|
||||
//! \endcode
|
||||
//! \~\sa \a expandRightTo(), \a expandedRightTo(), \a expandedLeftTo()
|
||||
PIString & expandLeftTo(const int len, const PIChar c) {if (len > d.size_s()) insert(0, PIString(len - d.size_s(), c)); return *this;}
|
||||
PIString & expandLeftTo(const int len, const PIChar c) {
|
||||
if (len > d.size_s()) insert(0, PIString(len - d.size_s(), c));
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Enlarge copy of this string to length "len" by addition characters "c" at the end.
|
||||
//! \~russian Увеличивает длину копии этой строки до "len" добавлением символов "c" в конец.
|
||||
@@ -679,7 +828,7 @@ public:
|
||||
//! piCout << s; // s = "str"
|
||||
//! \endcode
|
||||
//! \~\sa \a expandRightTo(), \a expandLeftTo(), \a expandedLeftTo()
|
||||
PIString expandedRightTo(const int len, const PIChar c) const {return PIString(*this).expandRightTo(len, c);}
|
||||
PIString expandedRightTo(const int len, const PIChar c) const { return PIString(*this).expandRightTo(len, c); }
|
||||
|
||||
//! \~english Enlarge copy of this string to length "len" by addition characters "c" at the begin.
|
||||
//! \~russian Увеличивает длину копии этой строки до "len" добавлением символов "c" в начало.
|
||||
@@ -690,7 +839,7 @@ public:
|
||||
//! piCout << s; // s = "str"
|
||||
//! \endcode
|
||||
//! \~\sa \a expandRightTo(), \a expandLeftTo(), \a expandedRightTo()
|
||||
PIString expandedLeftTo(const int len, const PIChar c) const {return PIString(*this).expandLeftTo(len, c);}
|
||||
PIString expandedLeftTo(const int len, const PIChar c) const { return PIString(*this).expandLeftTo(len, c); }
|
||||
|
||||
//! \~english Add "c" characters at the beginning and end, and return this string.
|
||||
//! \~russian Добавляет символ "c" в начало и конец и возвращает эту строку.
|
||||
@@ -701,7 +850,11 @@ public:
|
||||
//! piCout << s; // s = ""str""
|
||||
//! \endcode
|
||||
//! \~\sa \a quoted()
|
||||
PIString & quote(PIChar c = PIChar('"')) {d.prepend(c); d.append(c); return *this;}
|
||||
PIString & quote(PIChar c = PIChar('"')) {
|
||||
d.prepend(c);
|
||||
d.append(c);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Returns quoted copy of this string.
|
||||
//! \~russian Возвращает копию строки с добавленным в начало и конец символом "c".
|
||||
@@ -712,8 +865,8 @@ public:
|
||||
//! piCout << s; // s = "str"
|
||||
//! \endcode
|
||||
//! \~\sa \a quote()
|
||||
PIString quoted(PIChar c = PIChar('"')) {return PIString(*this).quote(c);}
|
||||
|
||||
PIString quoted(PIChar c = PIChar('"')) { return PIString(*this).quote(c); }
|
||||
|
||||
//! \~english Reverse string and return this string.
|
||||
//! \~russian Разворачивает и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -723,8 +876,11 @@ public:
|
||||
//! piCout << s; // s = "9876543210"
|
||||
//! \endcode
|
||||
//! \~\sa \a reversed()
|
||||
PIString & reverse() {d.reverse(); return *this;}
|
||||
|
||||
PIString & reverse() {
|
||||
d.reverse();
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Reverse copy of this string.
|
||||
//! \~russian Разворачивает копию этой строки.
|
||||
//! \~\details
|
||||
@@ -734,7 +890,10 @@ public:
|
||||
//! piCout << s; // s = "0123456789"
|
||||
//! \endcode
|
||||
//! \~\sa \a reverse()
|
||||
PIString reversed() const {PIString ret(*this); return ret.reverse();}
|
||||
PIString reversed() const {
|
||||
PIString ret(*this);
|
||||
return ret.reverse();
|
||||
}
|
||||
|
||||
//! \~english Fit string to maximum size "size" by inserting ".." at position "pos" and return this string.
|
||||
//! \~russian Уменьшает строку до размера "size", вставляя ".." в положение "pos" и возвращает эту строку.
|
||||
@@ -751,9 +910,13 @@ public:
|
||||
//! piCout << PIString("123456789ABCDEF").elided(8, 0.25); // 12..CDEF
|
||||
//! \endcode
|
||||
//! \~\sa \a elide()
|
||||
PIString elided(int size, float pos = ElideCenter) const {PIString str(*this); str.elide(size, pos); return str;}
|
||||
|
||||
|
||||
PIString elided(int size, float pos = ElideCenter) const {
|
||||
PIString str(*this);
|
||||
str.elide(size, pos);
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
//! \~english Take a part of string from character at index "start" and maximum length "len" and return it.
|
||||
//! \~russian Извлекает часть строки от символа "start" максимальной длины "len" и возвращает её.
|
||||
//! \~\details
|
||||
@@ -763,8 +926,12 @@ public:
|
||||
//! piCout << s; // s = "0456789"
|
||||
//! \endcode
|
||||
//! \~\sa \a takeLeft, \a takeRight()
|
||||
PIString takeMid(const int start, const int len = -1) {PIString ret(mid(start, len)); cutMid(start, len); return ret;}
|
||||
|
||||
PIString takeMid(const int start, const int len = -1) {
|
||||
PIString ret(mid(start, len));
|
||||
cutMid(start, len);
|
||||
return ret;
|
||||
}
|
||||
|
||||
//! \~english Take a part from the begin of string with maximum length "len" and return it.
|
||||
//! \~russian Извлекает часть строки от начала максимальной длины "len" и возвращает её.
|
||||
//! \~\details
|
||||
@@ -774,8 +941,12 @@ public:
|
||||
//! piCout << s; // s = "3456789"
|
||||
//! \endcode
|
||||
//! \~\sa \a takeMid(), \a takeRight()
|
||||
PIString takeLeft(const int len) {PIString ret(left(len)); cutLeft(len); return ret;}
|
||||
|
||||
PIString takeLeft(const int len) {
|
||||
PIString ret(left(len));
|
||||
cutLeft(len);
|
||||
return ret;
|
||||
}
|
||||
|
||||
//! \~english Take a part from the end of string with maximum length "len" and return it.
|
||||
//! \~russian Извлекает часть строки с конца максимальной длины "len" и возвращает её.
|
||||
//! \~\details
|
||||
@@ -785,24 +956,28 @@ public:
|
||||
//! piCout << s; // s = "0123456"
|
||||
//! \endcode
|
||||
//! \~\sa \a takeMid(), \a takeLeft()
|
||||
PIString takeRight(const int len) {PIString ret(right(len)); cutRight(len); return ret;}
|
||||
|
||||
PIString takeRight(const int len) {
|
||||
PIString ret(right(len));
|
||||
cutRight(len);
|
||||
return ret;
|
||||
}
|
||||
|
||||
//! \~english Take a character from the begin of this string and return it.
|
||||
//! \~russian Извлекает символ с начала строки и возвращает его как строку.
|
||||
PIString takeSymbol();
|
||||
|
||||
|
||||
//! \~english Take a word from the begin of this string and return it.
|
||||
//! \~russian Извлекает слово с начала строки и возвращает его.
|
||||
PIString takeWord();
|
||||
|
||||
|
||||
//! \~english Take a word with letters, numbers and '_' characters from the begin of this string and return it.
|
||||
//! \~russian Извлекает слово из букв, цифр и симолов '_' с начала строки и возвращает его.
|
||||
PIString takeCWord();
|
||||
|
||||
|
||||
//! \~english Take a line from the begin of this string and return it.
|
||||
//! \~russian Извлекает строку текста (до новой строки) с начала строки и возвращает её.
|
||||
PIString takeLine();
|
||||
|
||||
|
||||
//! \~english Take a number with C-format from the begin of this string and return it.
|
||||
//! \~russian Извлекает число в C-формате с начала строки и возвращает его как строку.
|
||||
PIString takeNumber();
|
||||
@@ -810,7 +985,7 @@ public:
|
||||
//! \~english Take a digits from the begin of this string and return it.
|
||||
//! \~russian Извлекает цифры с начала строки и возвращает их как строку.
|
||||
PIString takeInteger();
|
||||
|
||||
|
||||
//! \~english Take a range between "start" and "end" characters from the begin of this string and return it.
|
||||
//! \~russian Извлекает диапазон между символами "start" и "end" с начала строки и возвращает его.
|
||||
PIString takeRange(const PIChar start, const PIChar end, const PIChar shield = '\\');
|
||||
@@ -819,19 +994,19 @@ public:
|
||||
//! \~english Returns string in brackets "start" and "end" characters from the beginning.
|
||||
//! \~russian Возвращает строку между символами "start" и "end" с начала строки.
|
||||
PIString inBrackets(const PIChar start, const PIChar end) const;
|
||||
|
||||
|
||||
//! \~english Returns \c char * representation of this string in system codepage.
|
||||
//! \~russian Возвращает \c char * представление строки в системной кодировке.
|
||||
const char * data() const;
|
||||
|
||||
|
||||
//! \~english Returns \c char * representation of this string in terminal codepage.
|
||||
//! \~russian Возвращает \c char * представление строки в кодировке консоли.
|
||||
const char * dataConsole() const;
|
||||
|
||||
|
||||
//! \~english Returns \c char * representation of this string in UTF-8.
|
||||
//! \~russian Возвращает \c char * представление строки в кодировке UTF-8.
|
||||
const char * dataUTF8() const;
|
||||
|
||||
|
||||
//! \~english Returns \c char * representation of this string in ASCII.
|
||||
//! \~russian Возвращает \c char * представление строки в кодировке ASCII.
|
||||
const char * dataAscii() const;
|
||||
@@ -842,7 +1017,7 @@ public:
|
||||
|
||||
//! \~english Same as \a toUTF8().
|
||||
//! \~russian Тоже самое, что \a toUTF8().
|
||||
PIByteArray toByteArray() const {return toUTF8();}
|
||||
PIByteArray toByteArray() const { return toUTF8(); }
|
||||
|
||||
//! \~english Returns \a PIByteArray contains \a data() of this string without terminating null-char.
|
||||
//! \~russian Возвращает \a PIByteArray содержащий \a data() строки без завершающего нулевого байта.
|
||||
@@ -864,13 +1039,13 @@ public:
|
||||
//! \~russian Вставляет перед любым символом из "symbols" символ "mc" и возвращает эту строку.
|
||||
PIString & mask(const PIString & symbols, const PIChar mc = '\\');
|
||||
|
||||
PIString masked(const PIString & symbols, const PIChar mc = '\\') const {return PIString(*this).mask(symbols, mc);}
|
||||
PIString masked(const PIString & symbols, const PIChar mc = '\\') const { return PIString(*this).mask(symbols, mc); }
|
||||
|
||||
//! \~english Remove symbol "mc" before any symbol from "symbols" and return this string.
|
||||
//! \~russian Удаляет символ "mc" перед любым символом из "symbols" и возвращает эту строку.
|
||||
PIString & unmask(const PIString & symbols, const PIChar mc = '\\');
|
||||
|
||||
PIString unmasked(const PIString & symbols, const PIChar mc = '\\') const {return PIString(*this).unmask(symbols, mc);}
|
||||
PIString unmasked(const PIString & symbols, const PIChar mc = '\\') const { return PIString(*this).unmask(symbols, mc); }
|
||||
|
||||
//! \~english Split string with delimiter "delim" to \a PIStringList.
|
||||
//! \~russian Разделяет строку в \a PIStringList через разделитель "delim".
|
||||
@@ -885,7 +1060,7 @@ public:
|
||||
//! \~english Convert each character in copied string to upper case.
|
||||
//! \~russian Преобразует каждый символ в скопированной строке в верхний регистр.
|
||||
PIString toUpperCase() const;
|
||||
|
||||
|
||||
//! \~english Convert each character in copied string to lower case.
|
||||
//! \~russian Преобразует каждый символ в скопированной строке в нижний регистр.
|
||||
PIString toLowerCase() const;
|
||||
@@ -893,29 +1068,29 @@ public:
|
||||
|
||||
//! \~english Returns if string contains character "c".
|
||||
//! \~russian Возвращает содержит ли строка символ "c".
|
||||
bool contains(const char c) const {return d.contains(PIChar(c));}
|
||||
bool contains(const char c) const { return d.contains(PIChar(c)); }
|
||||
|
||||
//! \~english Returns if string contains character "c".
|
||||
//! \~russian Возвращает содержит ли строка символ "c".
|
||||
bool contains(const PIChar c) const {return d.contains(c);}
|
||||
bool contains(const PIChar c) const { return d.contains(c); }
|
||||
|
||||
//! \~english Returns if string contains substring "str".
|
||||
//! \~russian Возвращает содержит ли строка подстроку "str".
|
||||
bool contains(const char * str) const {return contains(PIString(str));}
|
||||
bool contains(const char * str) const { return contains(PIString(str)); }
|
||||
|
||||
//! \~english Returns if string contains substring "str".
|
||||
//! \~russian Возвращает содержит ли строка подстроку "str".
|
||||
bool contains(const PIString & str) const {return find(str) >= 0;}
|
||||
bool contains(const PIString & str) const { return find(str) >= 0; }
|
||||
|
||||
|
||||
|
||||
//! \~english Search character "c" from character at index "start" and return first occur position.
|
||||
//! \~russian Ищет символ "c" от символа "start" и возвращает первое вхождение.
|
||||
int find(const char c, const int start = 0) const;
|
||||
|
||||
//! \~english Search character "c" from character at index "start" and return first occur position.
|
||||
//! \~russian Ищет символ "c" от символа "start" и возвращает первое вхождение.
|
||||
int find(PIChar c, const int start = 0) const {return d.indexOf(c, start);}
|
||||
|
||||
int find(PIChar c, const int start = 0) const { return d.indexOf(c, start); }
|
||||
|
||||
//! \~english Search substring "str" from character at index "start" and return first occur position.
|
||||
//! \~russian Ищет подстроку "str" от символа "start" и возвращает первое вхождение.
|
||||
int find(const PIString & str, const int start = 0) const;
|
||||
@@ -931,7 +1106,7 @@ public:
|
||||
//! piCout << s.find("3", 10); // -1
|
||||
//! \endcode
|
||||
//! \~\sa \a findAny(), \a findLast(), \a findAnyLast(), \a findWord(), \a findCWord(), \a findRange()
|
||||
int find(const char * str, const int start = 0) const {return find(PIString(str), start);}
|
||||
int find(const char * str, const int start = 0) const { return find(PIString(str), start); }
|
||||
|
||||
//! \~english Search any character of "str" from character at index "start" and return first occur position.
|
||||
//! \~russian Ищет любой символ строки "str" от симола "start" и возвращает первое вхождение.
|
||||
@@ -946,12 +1121,12 @@ public:
|
||||
//! piCout << PIString("1:str").findAny(".,:"); // 1
|
||||
//! \endcode
|
||||
//! \~\sa \a find(), \a findLast(), \a findAnyLast(), \a findWord(), \a findCWord(), \a findRange()
|
||||
int findAny(const char * str, const int start = 0) const {return findAny(PIString(str), start);}
|
||||
|
||||
int findAny(const char * str, const int start = 0) const { return findAny(PIString(str), start); }
|
||||
|
||||
//! \~english Search character "c" from character at index "start" and return last occur position.
|
||||
//! \~russian Ищет символ "c" от символа "start" и возвращает последнее вхождение.
|
||||
int findLast(const char c, const int start = 0) const;
|
||||
|
||||
|
||||
//! \~english Search character "c" from character at index "start" and return last occur position.
|
||||
//! \~russian Ищет символ "c" от символа "start" и возвращает последнее вхождение.
|
||||
int findLast(PIChar c, const int start = 0) const;
|
||||
@@ -959,7 +1134,7 @@ public:
|
||||
//! \~english Search substring "str" from character at index "start" and return last occur position.
|
||||
//! \~russian Ищет подстроку "str" от символа "start" и возвращает последнее вхождение.
|
||||
int findLast(const PIString & str, const int start = 0) const;
|
||||
|
||||
|
||||
//! \~english Search substring "str" from character at index "start" and return last occur position.
|
||||
//! \~russian Ищет подстроку "str" от символа "start" и возвращает последнее вхождение.
|
||||
//! \~\details
|
||||
@@ -971,7 +1146,7 @@ public:
|
||||
//! piCout << s.findLast("3", 10); // -1
|
||||
//! \endcode
|
||||
//! \~\sa \a find(), \a findAny(), \a findAnyLast(), \a findWord(), \a findCWord(), \a findRange()
|
||||
int findLast(const char * str, const int start = 0) const {return findLast(PIString(str), start);}
|
||||
int findLast(const char * str, const int start = 0) const { return findLast(PIString(str), start); }
|
||||
|
||||
//! \~english Search any character of "str" from character at index "start" and return last occur position.
|
||||
//! \~russian Ищет любой символ строки "str" от символа "start" и возвращает последнее вхождение.
|
||||
@@ -986,12 +1161,12 @@ public:
|
||||
//! piCout << PIString(".str:0").findAnyLast(".,:"); // 4
|
||||
//! \endcode
|
||||
//! \~\sa \a find(), \a findAny(), \a findLast(), \a findWord(), \a findCWord(), \a findRange()
|
||||
int findAnyLast(const char * str, const int start = 0) const {return findAnyLast(PIString(str), start);}
|
||||
int findAnyLast(const char * str, const int start = 0) const { return findAnyLast(PIString(str), start); }
|
||||
|
||||
//! \~english Search word "word" from character at index "start" and return first occur position.
|
||||
//! \~russian Ищет слово "word" от симола "start" и возвращает первое вхождение.
|
||||
int findWord(const PIString & word, const int start = 0) const;
|
||||
|
||||
|
||||
//! \~english Search C-word "word" from character at index "start" and return first occur position.
|
||||
//! \~russian Ищет C-слово "word" от симола "start" и возвращает первое вхождение.
|
||||
int findCWord(const PIString & word, const int start = 0) const;
|
||||
@@ -1016,35 +1191,39 @@ public:
|
||||
//! piCout << PIString(".str.0").entries('.'); // 2
|
||||
//! piCout << PIString(".str.0").entries('0'); // 1
|
||||
//! \endcode
|
||||
int entries(char c) const {return entries(PIChar(c));}
|
||||
int entries(char c) const { return entries(PIChar(c)); }
|
||||
|
||||
//! \~english Returns if string starts with "str".
|
||||
//! \~russian Возвращает начинается ли строка со "str".
|
||||
bool startsWith(const PIString & str) const;
|
||||
|
||||
|
||||
//! \~english Returns if string ends with "str".
|
||||
//! \~russian Возвращает оканчивается ли строка на "str".
|
||||
bool endsWith(const PIString & str) const;
|
||||
|
||||
//! \~english Returns characters length of string.
|
||||
//! \~russian Возвращает длину строки в символах.
|
||||
int length() const {return d.size_s();}
|
||||
int length() const { return d.size_s(); }
|
||||
|
||||
//! \~english Returns characters length of string.
|
||||
//! \~russian Возвращает длину строки в символах.
|
||||
size_t size() const {return d.size();}
|
||||
size_t size() const { return d.size(); }
|
||||
|
||||
//! \~english Returns characters length of string.
|
||||
//! \~russian Возвращает длину строки в символах.
|
||||
ssize_t size_s() const {return d.size_s();}
|
||||
|
||||
ssize_t size_s() const { return d.size_s(); }
|
||||
|
||||
//! \~english Returns \c true if string is empty, i.e. length = 0.
|
||||
//! \~russian Возвращает \c true если строка пустая, т.е. длина = 0.
|
||||
bool isEmpty() const {if (d.isEmpty()) return true; if (d.at(0) == PIChar()) return true; return false;}
|
||||
bool isEmpty() const {
|
||||
if (d.isEmpty()) return true;
|
||||
if (d.at(0) == PIChar()) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
//! \~english Returns \c true if string is not empty, i.e. length > 0.
|
||||
//! \~russian Возвращает \c true если строка непустая, т.е. длина > 0.
|
||||
bool isNotEmpty() const {return !isEmpty();}
|
||||
bool isNotEmpty() const { return !isEmpty(); }
|
||||
|
||||
//! \~english Clear string, will be empty string.
|
||||
//! \~russian Очищает строку, строка становится пустой.
|
||||
@@ -1053,16 +1232,16 @@ public:
|
||||
//! \~english Reserved memory will not be released.
|
||||
//! \~russian Зарезервированная память не освободится.
|
||||
//! \~\sa \a resize()
|
||||
void clear() {d.clear();}
|
||||
|
||||
void clear() { d.clear(); }
|
||||
|
||||
//! \~english Returns \c true if string equal "true", "yes", "on" or positive not null numeric value.
|
||||
//! \~russian Возвращает \c true если строка равна "true", "yes", "on" или числу > 0.
|
||||
bool toBool() const;
|
||||
|
||||
|
||||
//! \~english Returns \c char numeric value of string.
|
||||
//! \~russian Возвращает \c char числовое значение строки.
|
||||
char toChar() const;
|
||||
|
||||
|
||||
//! \~english Returns \c short numeric value of string in base "base".
|
||||
//! \~russian Возвращает \c short числовое значение строки по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1074,8 +1253,8 @@ public:
|
||||
//! piCout << PIString("0x123").toShort(); // 291
|
||||
//! piCout << PIString("1001").toShort(2); // 9
|
||||
//! \endcode
|
||||
short toShort(int base = -1, bool * ok = 0) const {return short(toNumberBase(*this, base, ok));}
|
||||
|
||||
short toShort(int base = -1, bool * ok = 0) const { return short(toNumberBase(*this, base, ok)); }
|
||||
|
||||
//! \~english Returns \c ushort numeric value of string in base "base".
|
||||
//! \~russian Возвращает \c ushort числовое значение строки по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1087,8 +1266,8 @@ public:
|
||||
//! piCout << PIString("0x123").toUShort(); // 291
|
||||
//! piCout << PIString("1001").toUShort(2); // 9
|
||||
//! \endcode
|
||||
ushort toUShort(int base = -1, bool * ok = 0) const {return ushort(toNumberBase(*this, base, ok));}
|
||||
|
||||
ushort toUShort(int base = -1, bool * ok = 0) const { return ushort(toNumberBase(*this, base, ok)); }
|
||||
|
||||
//! \~english Returns \c int numeric value of string in base "base".
|
||||
//! \~russian Возвращает \c int числовое значение строки по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1100,8 +1279,8 @@ public:
|
||||
//! piCout << PIString("0x123").toInt(); // 291
|
||||
//! piCout << PIString("1001").toInt(2); // 9
|
||||
//! \endcode
|
||||
int toInt(int base = -1, bool * ok = 0) const {return int(toNumberBase(*this, base, ok));}
|
||||
|
||||
int toInt(int base = -1, bool * ok = 0) const { return int(toNumberBase(*this, base, ok)); }
|
||||
|
||||
//! \~english Returns \c uint numeric value of string in base "base".
|
||||
//! \~russian Возвращает \c uint числовое значение строки по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1113,8 +1292,8 @@ public:
|
||||
//! piCout << PIString("0x123").toUInt(); // 291
|
||||
//! piCout << PIString("1001").toUInt(2); // 9
|
||||
//! \endcode
|
||||
uint toUInt(int base = -1, bool * ok = 0) const {return uint(toNumberBase(*this, base, ok));}
|
||||
|
||||
uint toUInt(int base = -1, bool * ok = 0) const { return uint(toNumberBase(*this, base, ok)); }
|
||||
|
||||
//! \~english Returns \c long numeric value of string in base "base".
|
||||
//! \~russian Возвращает \c long числовое значение строки по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1126,8 +1305,8 @@ public:
|
||||
//! piCout << PIString("0x123").toLong(); // 291
|
||||
//! piCout << PIString("1001").toLong(2); // 9
|
||||
//! \endcode
|
||||
long toLong(int base = -1, bool * ok = 0) const {return long(toNumberBase(*this, base, ok));}
|
||||
|
||||
long toLong(int base = -1, bool * ok = 0) const { return long(toNumberBase(*this, base, ok)); }
|
||||
|
||||
//! \~english Returns \c ulong numeric value of string in base "base".
|
||||
//! \~russian Возвращает \c ulong числовое значение строки по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1139,8 +1318,8 @@ public:
|
||||
//! piCout << PIString("0x123").toULong(); // 291
|
||||
//! piCout << PIString("1001").toULong(2); // 9
|
||||
//! \endcode
|
||||
ulong toULong(int base = -1, bool * ok = 0) const {return ulong(toNumberBase(*this, base, ok));}
|
||||
|
||||
ulong toULong(int base = -1, bool * ok = 0) const { return ulong(toNumberBase(*this, base, ok)); }
|
||||
|
||||
//! \~english Returns \c llong numeric value of string in base "base".
|
||||
//! \~russian Возвращает \c llong числовое значение строки по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1152,8 +1331,8 @@ public:
|
||||
//! piCout << PIString("0x123").toLLong(); // 291
|
||||
//! piCout << PIString("1001").toLLong(2); // 9
|
||||
//! \endcode
|
||||
llong toLLong(int base = -1, bool * ok = 0) const {return toNumberBase(*this, base, ok);}
|
||||
|
||||
llong toLLong(int base = -1, bool * ok = 0) const { return toNumberBase(*this, base, ok); }
|
||||
|
||||
//! \~english Returns \c ullong numeric value of string in base "base".
|
||||
//! \~russian Возвращает \c ullong числовое значение строки по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1165,8 +1344,8 @@ public:
|
||||
//! piCout << PIString("0x123").toULLong(); // 291
|
||||
//! piCout << PIString("1001").toULLong(2); // 9
|
||||
//! \endcode
|
||||
ullong toULLong(int base = -1, bool * ok = 0) const {return ullong(toNumberBase(*this, base, ok));}
|
||||
|
||||
ullong toULLong(int base = -1, bool * ok = 0) const { return ullong(toNumberBase(*this, base, ok)); }
|
||||
|
||||
//! \~english Returns \c float numeric value of string.
|
||||
//! \~russian Возвращает \c float числовое значение строки.
|
||||
//! \~\details
|
||||
@@ -1176,7 +1355,7 @@ public:
|
||||
//! piCout << PIString("0.01").toFloat(); // 0.01
|
||||
//! \endcode
|
||||
float toFloat() const;
|
||||
|
||||
|
||||
//! \~english Returns \c double numeric value of string.
|
||||
//! \~russian Возвращает \c double числовое значение строки.
|
||||
//! \~\details
|
||||
@@ -1186,7 +1365,7 @@ public:
|
||||
//! piCout << PIString("0.01").toDouble(); // 0.01
|
||||
//! \endcode
|
||||
double toDouble() const;
|
||||
|
||||
|
||||
//! \~english Returns \c ldouble numeric value of string.
|
||||
//! \~russian Возвращает \c ldouble числовое значение строки.
|
||||
//! \~\details
|
||||
@@ -1207,8 +1386,11 @@ public:
|
||||
//! s.setNumber(123, 16);
|
||||
//! piCout << s; // 7B
|
||||
//! \endcode
|
||||
PIString & setNumber(const short value, int base = 10, bool * ok = 0) {*this = PIString::fromNumber(value, base, ok); return *this;}
|
||||
|
||||
PIString & setNumber(const short value, int base = 10, bool * ok = 0) {
|
||||
*this = PIString::fromNumber(value, base, ok);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Set string content to text representation of "value" in base "base" and return this string.
|
||||
//! \~russian Устанавливает содержимое строки в текстовое представление "value" по основанию "base" и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -1219,8 +1401,11 @@ public:
|
||||
//! s.setNumber(123, 16);
|
||||
//! piCout << s; // 7B
|
||||
//! \endcode
|
||||
PIString & setNumber(const ushort value, int base = 10, bool * ok = 0) {*this = PIString::fromNumber(value, base, ok); return *this;}
|
||||
|
||||
PIString & setNumber(const ushort value, int base = 10, bool * ok = 0) {
|
||||
*this = PIString::fromNumber(value, base, ok);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Set string content to text representation of "value" in base "base" and return this string.
|
||||
//! \~russian Устанавливает содержимое строки в текстовое представление "value" по основанию "base" и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -1231,8 +1416,11 @@ public:
|
||||
//! s.setNumber(123, 16);
|
||||
//! piCout << s; // 7B
|
||||
//! \endcode
|
||||
PIString & setNumber(const int value, int base = 10, bool * ok = 0) {*this = PIString::fromNumber(value, base, ok); return *this;}
|
||||
|
||||
PIString & setNumber(const int value, int base = 10, bool * ok = 0) {
|
||||
*this = PIString::fromNumber(value, base, ok);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Set string content to text representation of "value" in base "base" and return this string.
|
||||
//! \~russian Устанавливает содержимое строки в текстовое представление "value" по основанию "base" и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -1243,8 +1431,11 @@ public:
|
||||
//! s.setNumber(123, 16);
|
||||
//! piCout << s; // 7B
|
||||
//! \endcode
|
||||
PIString & setNumber(const uint value, int base = 10, bool * ok = 0) {*this = PIString::fromNumber(value, base, ok); return *this;}
|
||||
|
||||
PIString & setNumber(const uint value, int base = 10, bool * ok = 0) {
|
||||
*this = PIString::fromNumber(value, base, ok);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Set string content to text representation of "value" in base "base" and return this string.
|
||||
//! \~russian Устанавливает содержимое строки в текстовое представление "value" по основанию "base" и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -1255,8 +1446,11 @@ public:
|
||||
//! s.setNumber(123, 16);
|
||||
//! piCout << s; // 7B
|
||||
//! \endcode
|
||||
PIString & setNumber(const long value, int base = 10, bool * ok = 0) {*this = PIString::fromNumber(value, base, ok); return *this;}
|
||||
|
||||
PIString & setNumber(const long value, int base = 10, bool * ok = 0) {
|
||||
*this = PIString::fromNumber(value, base, ok);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Set string content to text representation of "value" in base "base" and return this string.
|
||||
//! \~russian Устанавливает содержимое строки в текстовое представление "value" по основанию "base" и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -1267,8 +1461,11 @@ public:
|
||||
//! s.setNumber(123, 16);
|
||||
//! piCout << s; // 7B
|
||||
//! \endcode
|
||||
PIString & setNumber(const ulong value, int base = 10, bool * ok = 0) {*this = PIString::fromNumber(value, base, ok); return *this;}
|
||||
|
||||
PIString & setNumber(const ulong value, int base = 10, bool * ok = 0) {
|
||||
*this = PIString::fromNumber(value, base, ok);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Set string content to text representation of "value" in base "base" and return this string.
|
||||
//! \~russian Устанавливает содержимое строки в текстовое представление "value" по основанию "base" и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -1279,8 +1476,11 @@ public:
|
||||
//! s.setNumber(123, 16);
|
||||
//! piCout << s; // 7B
|
||||
//! \endcode
|
||||
PIString & setNumber(const llong & value, int base = 10, bool * ok = 0) {*this = PIString::fromNumber(value, base, ok); return *this;}
|
||||
|
||||
PIString & setNumber(const llong & value, int base = 10, bool * ok = 0) {
|
||||
*this = PIString::fromNumber(value, base, ok);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Set string content to text representation of "value" in base "base" and return this string.
|
||||
//! \~russian Устанавливает содержимое строки в текстовое представление "value" по основанию "base" и возвращает эту строку.
|
||||
//! \~\details
|
||||
@@ -1291,10 +1491,15 @@ public:
|
||||
//! s.setNumber(123, 16);
|
||||
//! piCout << s; // 7B
|
||||
//! \endcode
|
||||
PIString & setNumber(const ullong & value, int base = 10, bool * ok = 0) {*this = PIString::fromNumber(value, base, ok); return *this;}
|
||||
|
||||
//! \~english Set string content to text representation of "value" with format "format" and precision "precision" and return this string.
|
||||
//! \~russian Устанавливает содержимое строки в текстовое представление "value" в формате "format" и точностью "precision" и возвращает эту строку.
|
||||
PIString & setNumber(const ullong & value, int base = 10, bool * ok = 0) {
|
||||
*this = PIString::fromNumber(value, base, ok);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Set string content to text representation of "value" with format "format" and precision "precision" and return this
|
||||
//! string.
|
||||
//! \~russian Устанавливает содержимое строки в текстовое представление "value" в формате "format" и точностью "precision" и возвращает
|
||||
//! эту строку.
|
||||
//! \~\details
|
||||
//! \~\code
|
||||
//! PIString s;
|
||||
@@ -1309,10 +1514,15 @@ public:
|
||||
//! s.setNumber(123456789., 'f', 0);
|
||||
//! piCout << s; // 123456789
|
||||
//! \endcode
|
||||
PIString & setNumber(const float value, char format = 'f', int precision = 8) {*this = PIString::fromNumber(value, format, precision); return *this;}
|
||||
|
||||
//! \~english Set string content to text representation of "value" with format "format" and precision "precision" and return this string.
|
||||
//! \~russian Устанавливает содержимое строки в текстовое представление "value" в формате "format" и точностью "precision" и возвращает эту строку.
|
||||
PIString & setNumber(const float value, char format = 'f', int precision = 8) {
|
||||
*this = PIString::fromNumber(value, format, precision);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Set string content to text representation of "value" with format "format" and precision "precision" and return this
|
||||
//! string.
|
||||
//! \~russian Устанавливает содержимое строки в текстовое представление "value" в формате "format" и точностью "precision" и возвращает
|
||||
//! эту строку.
|
||||
//! \~\details
|
||||
//! \~\code
|
||||
//! PIString s;
|
||||
@@ -1327,10 +1537,15 @@ public:
|
||||
//! s.setNumber(123456789., 'f', 0);
|
||||
//! piCout << s; // 123456789
|
||||
//! \endcode
|
||||
PIString & setNumber(const double & value, char format = 'f', int precision = 8) {*this = PIString::fromNumber(value, format, precision); return *this;}
|
||||
|
||||
//! \~english Set string content to text representation of "value" with format "format" and precision "precision" and return this string.
|
||||
//! \~russian Устанавливает содержимое строки в текстовое представление "value" в формате "format" и точностью "precision" и возвращает эту строку.
|
||||
PIString & setNumber(const double & value, char format = 'f', int precision = 8) {
|
||||
*this = PIString::fromNumber(value, format, precision);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Set string content to text representation of "value" with format "format" and precision "precision" and return this
|
||||
//! string.
|
||||
//! \~russian Устанавливает содержимое строки в текстовое представление "value" в формате "format" и точностью "precision" и возвращает
|
||||
//! эту строку.
|
||||
//! \~\details
|
||||
//! \~\code
|
||||
//! PIString s;
|
||||
@@ -1345,8 +1560,11 @@ public:
|
||||
//! s.setNumber(123456789., 'f', 0);
|
||||
//! piCout << s; // 123456789
|
||||
//! \endcode
|
||||
PIString & setNumber(const ldouble & value, char format = 'f', int precision = 8) {*this = PIString::fromNumber(value, format, precision); return *this;}
|
||||
|
||||
PIString & setNumber(const ldouble & value, char format = 'f', int precision = 8) {
|
||||
*this = PIString::fromNumber(value, format, precision);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Set string content to human readable size in B/kB/MB/GB/TB/PB.
|
||||
//! \~russian Устанавливает содержимое в строку с читаемым размером B/kB/MB/GB/TB/PB.
|
||||
//! \~\sa PIString::readableSize()
|
||||
@@ -1359,8 +1577,8 @@ public:
|
||||
//! piCout << PIString::fromNumber(123); // 123
|
||||
//! piCout << PIString::fromNumber(123, 16); // 7B
|
||||
//! \endcode
|
||||
static PIString fromNumber(const short value, int base = 10, bool * ok = 0) {return fromNumberBaseS(llong(value), base, ok);}
|
||||
|
||||
static PIString fromNumber(const short value, int base = 10, bool * ok = 0) { return fromNumberBaseS(llong(value), base, ok); }
|
||||
|
||||
//! \~english Returns string contains numeric representation of "value" in base "base".
|
||||
//! \~russian Возвращает строковое представление числа "value" по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1368,8 +1586,8 @@ public:
|
||||
//! piCout << PIString::fromNumber(123); // 123
|
||||
//! piCout << PIString::fromNumber(123, 16); // 7B
|
||||
//! \endcode
|
||||
static PIString fromNumber(const ushort value, int base = 10, bool * ok = 0) {return fromNumberBaseU(ullong(value), base, ok);}
|
||||
|
||||
static PIString fromNumber(const ushort value, int base = 10, bool * ok = 0) { return fromNumberBaseU(ullong(value), base, ok); }
|
||||
|
||||
//! \~english Returns string contains numeric representation of "value" in base "base".
|
||||
//! \~russian Возвращает строковое представление числа "value" по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1377,8 +1595,8 @@ public:
|
||||
//! piCout << PIString::fromNumber(123); // 123
|
||||
//! piCout << PIString::fromNumber(123, 16); // 7B
|
||||
//! \endcode
|
||||
static PIString fromNumber(const int value, int base = 10, bool * ok = 0) {return fromNumberBaseS(llong(value), base, ok);}
|
||||
|
||||
static PIString fromNumber(const int value, int base = 10, bool * ok = 0) { return fromNumberBaseS(llong(value), base, ok); }
|
||||
|
||||
//! \~english Returns string contains numeric representation of "value" in base "base".
|
||||
//! \~russian Возвращает строковое представление числа "value" по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1386,8 +1604,8 @@ public:
|
||||
//! piCout << PIString::fromNumber(123); // 123
|
||||
//! piCout << PIString::fromNumber(123, 16); // 7B
|
||||
//! \endcode
|
||||
static PIString fromNumber(const uint value, int base = 10, bool * ok = 0) {return fromNumberBaseU(ullong(value), base, ok);}
|
||||
|
||||
static PIString fromNumber(const uint value, int base = 10, bool * ok = 0) { return fromNumberBaseU(ullong(value), base, ok); }
|
||||
|
||||
//! \~english Returns string contains numeric representation of "value" in base "base".
|
||||
//! \~russian Возвращает строковое представление числа "value" по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1395,8 +1613,8 @@ public:
|
||||
//! piCout << PIString::fromNumber(123); // 123
|
||||
//! piCout << PIString::fromNumber(123, 16); // 7B
|
||||
//! \endcode
|
||||
static PIString fromNumber(const long value, int base = 10, bool * ok = 0) {return fromNumberBaseS(llong(value), base, ok);}
|
||||
|
||||
static PIString fromNumber(const long value, int base = 10, bool * ok = 0) { return fromNumberBaseS(llong(value), base, ok); }
|
||||
|
||||
//! \~english Returns string contains numeric representation of "value" in base "base".
|
||||
//! \~russian Возвращает строковое представление числа "value" по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1404,8 +1622,8 @@ public:
|
||||
//! piCout << PIString::fromNumber(123); // 123
|
||||
//! piCout << PIString::fromNumber(123, 16); // 7B
|
||||
//! \endcode
|
||||
static PIString fromNumber(const ulong value, int base = 10, bool * ok = 0) {return fromNumberBaseU(ullong(value), base, ok);}
|
||||
|
||||
static PIString fromNumber(const ulong value, int base = 10, bool * ok = 0) { return fromNumberBaseU(ullong(value), base, ok); }
|
||||
|
||||
//! \~english Returns string contains numeric representation of "value" in base "base".
|
||||
//! \~russian Возвращает строковое представление числа "value" по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1413,8 +1631,8 @@ public:
|
||||
//! piCout << PIString::fromNumber(123); // 123
|
||||
//! piCout << PIString::fromNumber(123, 16); // 7B
|
||||
//! \endcode
|
||||
static PIString fromNumber(const llong & value, int base = 10, bool * ok = 0) {return fromNumberBaseS(value, base, ok);}
|
||||
|
||||
static PIString fromNumber(const llong & value, int base = 10, bool * ok = 0) { return fromNumberBaseS(value, base, ok); }
|
||||
|
||||
//! \~english Returns string contains numeric representation of "value" in base "base".
|
||||
//! \~russian Возвращает строковое представление числа "value" по основанию "base".
|
||||
//! \~\details
|
||||
@@ -1422,8 +1640,8 @@ public:
|
||||
//! piCout << PIString::fromNumber(123); // 123
|
||||
//! piCout << PIString::fromNumber(123, 16); // 7B
|
||||
//! \endcode
|
||||
static PIString fromNumber(const ullong & value, int base = 10, bool * ok = 0) {return fromNumberBaseU(value, base, ok);}
|
||||
|
||||
static PIString fromNumber(const ullong & value, int base = 10, bool * ok = 0) { return fromNumberBaseU(value, base, ok); }
|
||||
|
||||
//! \~english Returns string contains numeric representation of "value" with format "format" and precision "precision".
|
||||
//! \~russian Возвращает строковое представление числа "value" в формате "format" и точностью "precision".
|
||||
//! \~\details
|
||||
@@ -1434,8 +1652,8 @@ public:
|
||||
//! piCout << PIString::fromNumber(123456789., 'g', 2); // 1.2e+08
|
||||
//! piCout << PIString::fromNumber(123456789., 'f', 0); // 123456789
|
||||
//! \endcode
|
||||
static PIString fromNumber(const float value, char format = 'f', int precision = 8) {return dtos(value, format, precision);}
|
||||
|
||||
static PIString fromNumber(const float value, char format = 'f', int precision = 8) { return dtos(value, format, precision); }
|
||||
|
||||
//! \~english Returns string contains numeric representation of "value" with format "format" and precision "precision".
|
||||
//! \~russian Возвращает строковое представление числа "value" в формате "format" и точностью "precision".
|
||||
//! \~\details
|
||||
@@ -1446,8 +1664,8 @@ public:
|
||||
//! piCout << PIString::fromNumber(123456789., 'g', 2); // 1.2e+08
|
||||
//! piCout << PIString::fromNumber(123456789., 'f', 0); // 123456789
|
||||
//! \endcode
|
||||
static PIString fromNumber(const double & value, char format = 'f', int precision = 8) {return dtos(value, format, precision);}
|
||||
|
||||
static PIString fromNumber(const double & value, char format = 'f', int precision = 8) { return dtos(value, format, precision); }
|
||||
|
||||
//! \~english Returns string contains numeric representation of "value" with format "format" and precision "precision".
|
||||
//! \~russian Возвращает строковое представление числа "value" в формате "format" и точностью "precision".
|
||||
//! \~\details
|
||||
@@ -1458,16 +1676,16 @@ public:
|
||||
//! piCout << PIString::fromNumber(123456789., 'g', 2); // 1.2e+08
|
||||
//! piCout << PIString::fromNumber(123456789., 'f', 0); // 123456789
|
||||
//! \endcode
|
||||
static PIString fromNumber(const ldouble & value, char format = 'f', int precision = 8) {return dtos(value, format, precision);}
|
||||
|
||||
static PIString fromNumber(const ldouble & value, char format = 'f', int precision = 8) { return dtos(value, format, precision); }
|
||||
|
||||
//! \~english Returns "true" or "false"
|
||||
//! \~russian Возвращает "true" или "false"
|
||||
static PIString fromBool(const bool value) {return PIString(value ? PIStringAscii("true") : PIStringAscii("false"));}
|
||||
static PIString fromBool(const bool value) { return PIString(value ? PIStringAscii("true") : PIStringAscii("false")); }
|
||||
|
||||
//! \~english Returns string constructed from terminal codepage.
|
||||
//! \~russian Возвращает строку созданную из кодировки консоли.
|
||||
static PIString fromConsole(const PIByteArray & s);
|
||||
|
||||
|
||||
//! \~english Returns string constructed from terminal codepage.
|
||||
//! \~russian Возвращает строку созданную из кодировки консоли.
|
||||
static PIString fromConsole(const char * s);
|
||||
@@ -1475,15 +1693,15 @@ public:
|
||||
//! \~english Returns string constructed from system codepage.
|
||||
//! \~russian Возвращает строку созданную из кодировки системы.
|
||||
static PIString fromSystem(const PIByteArray & s);
|
||||
|
||||
|
||||
//! \~english Returns string constructed from system codepage.
|
||||
//! \~russian Возвращает строку созданную из кодировки системы.
|
||||
static PIString fromSystem(const char * s);
|
||||
|
||||
|
||||
//! \~english Returns string constructed from UTF-8.
|
||||
//! \~russian Возвращает строку созданную из UTF-8.
|
||||
static PIString fromUTF8(const char * s);
|
||||
|
||||
|
||||
//! \~english Returns string constructed from UTF-8.
|
||||
//! \~russian Возвращает строку созданную из UTF-8.
|
||||
static PIString fromUTF8(const PIByteArray & utf);
|
||||
@@ -1518,7 +1736,7 @@ public:
|
||||
private:
|
||||
static const char toBaseN[];
|
||||
static const char fromBaseN[];
|
||||
|
||||
|
||||
static PIString itos(const int num);
|
||||
static PIString ltos(const long num);
|
||||
static PIString lltos(const llong num);
|
||||
@@ -1532,7 +1750,7 @@ private:
|
||||
void appendFromChars(const char * c, int s, const char * cp = __syslocname__);
|
||||
void buildData(const char * cp = __syslocname__) const;
|
||||
void deleteData() const;
|
||||
void trimsubstr(int &st, int &fn) const;
|
||||
void trimsubstr(int & st, int & fn) const;
|
||||
|
||||
PIDeque<PIChar> d;
|
||||
mutable char * data_ = nullptr;
|
||||
@@ -1541,33 +1759,55 @@ private:
|
||||
//! \relatesalso PIBinaryStream
|
||||
//! \~english Store operator.
|
||||
//! \~russian Оператор сохранения.
|
||||
BINARY_STREAM_WRITE(PIString) {s << v.d; return s;}
|
||||
BINARY_STREAM_WRITE(PIString) {
|
||||
s << v.d;
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \relatesalso PIBinaryStream
|
||||
//! \~english Restore operator.
|
||||
//! \~russian Оператор извлечения.
|
||||
BINARY_STREAM_READ(PIString) {s >> v.d; return s;}
|
||||
BINARY_STREAM_READ(PIString) {
|
||||
s >> v.d;
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
//! \~english Returns concatenated string.
|
||||
//! \~russian Возвращает соединение строк.
|
||||
inline PIString operator +(const PIString & str, const PIString & f) {PIString s(str); s += f; return s;}
|
||||
inline PIString operator+(const PIString & str, const PIString & f) {
|
||||
PIString s(str);
|
||||
s += f;
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Returns concatenated string.
|
||||
//! \~russian Возвращает соединение строк.
|
||||
inline PIString operator +(const PIString & f, const char * str) {PIString s(f); s += str; return s;}
|
||||
inline PIString operator+(const PIString & f, const char * str) {
|
||||
PIString s(f);
|
||||
s += str;
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Returns concatenated string.
|
||||
//! \~russian Возвращает соединение строк.
|
||||
inline PIString operator +(const char * str, const PIString & f) {return PIString(str) + f;}
|
||||
inline PIString operator+(const char * str, const PIString & f) {
|
||||
return PIString(str) + f;
|
||||
}
|
||||
|
||||
//! \~english Returns concatenated string.
|
||||
//! \~russian Возвращает соединение строк.
|
||||
inline PIString operator +(const char c, const PIString & f) {return PIString(c) + f;}
|
||||
inline PIString operator+(const char c, const PIString & f) {
|
||||
return PIString(c) + f;
|
||||
}
|
||||
|
||||
//! \~english Returns concatenated string.
|
||||
//! \~russian Возвращает соединение строк.
|
||||
inline PIString operator +(const PIString & f, const char c) {PIString s(f); s.push_back(c); return s;}
|
||||
inline PIString operator+(const PIString & f, const char c) {
|
||||
PIString s(f);
|
||||
s.push_back(c);
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
//! \relatesalso PIString
|
||||
@@ -1581,9 +1821,13 @@ int PIP_EXPORT versionCompare(const PIString & v0, const PIString & v1, int comp
|
||||
PIString PIP_EXPORT versionNormalize(const PIString & v);
|
||||
|
||||
|
||||
template<> inline uint piHash(const PIString & s) {return s.hash();}
|
||||
template<>
|
||||
inline uint piHash(const PIString & s) {
|
||||
return s.hash();
|
||||
}
|
||||
|
||||
template<> inline void piSwap(PIString & f, PIString & s) {
|
||||
template<>
|
||||
inline void piSwap(PIString & f, PIString & s) {
|
||||
f.swap(s);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,24 +3,24 @@
|
||||
* \brief
|
||||
* \~english STD convertions for PIString
|
||||
* \~russian Преобразования в/из STD для строки
|
||||
*/
|
||||
*/
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
STD for PIString
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
PIP - Platform Independent Primitives
|
||||
STD for PIString
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@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 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.
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef PISTRING_STD_H
|
||||
#define PISTRING_STD_H
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
#include <string>
|
||||
#ifdef QNX
|
||||
typedef std::basic_string<wchar_t> wstring;
|
||||
typedef std::basic_string<wchar_t> wstring;
|
||||
#endif
|
||||
#include "pistringlist.h"
|
||||
|
||||
@@ -76,16 +76,15 @@ inline PIString StdWString2PIString(const std::wstring & v) {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//! \relatesalso PIChar \brief Output operator to \c std::ostream
|
||||
inline std::ostream & operator <<(std::ostream & s, const PIChar & v) {
|
||||
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) {
|
||||
inline PIString operator+(const PIString & f, const std::string & str) {
|
||||
PIString s(f);
|
||||
s += StdString2PIString(str);
|
||||
return s;
|
||||
@@ -93,13 +92,13 @@ inline PIString operator +(const PIString & f, const std::string & str) {
|
||||
|
||||
|
||||
//! \relatesalso PIString \brief Return concatenated string
|
||||
inline PIString operator +(const std::string & str, const PIString & f) {
|
||||
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) {
|
||||
inline std::ostream & operator<<(std::ostream & s, const PIString & v) {
|
||||
for (int i = 0; i < v.length(); ++i) {
|
||||
s << v[i];
|
||||
}
|
||||
@@ -108,7 +107,7 @@ inline std::ostream & operator <<(std::ostream & s, const PIString & v) {
|
||||
|
||||
|
||||
//! \relatesalso PIString \brief Input operator from std::istream (cin)
|
||||
inline std::istream & operator >>(std::istream & s, PIString & v) {
|
||||
inline std::istream & operator>>(std::istream & s, PIString & v) {
|
||||
std::string ss;
|
||||
s >> ss;
|
||||
v = StdString2PIString(ss);
|
||||
@@ -117,7 +116,7 @@ inline std::istream & operator >>(std::istream & s, PIString & v) {
|
||||
|
||||
|
||||
//! \relatesalso PIStringList \brief Output operator to std::ostream (cout)
|
||||
inline std::ostream & operator <<(std::ostream & s, const PIStringList & v) {
|
||||
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("\"");
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
Strings array class
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
PIP - Platform Independent Primitives
|
||||
Strings array class
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@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 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.
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "pistringlist.h"
|
||||
@@ -37,8 +37,7 @@ PIString PIStringList::join(const PIString & delim) const {
|
||||
PIString s;
|
||||
for (uint i = 0; i < size(); ++i) {
|
||||
s += at(i);
|
||||
if (i < size() - 1)
|
||||
s += delim;
|
||||
if (i < size() - 1) s += delim;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
@@ -73,16 +72,17 @@ PIStringList & PIStringList::removeStrings(const PIString & value) {
|
||||
//! piCout << sl; // {"1", "2", "1", "2", "3"}
|
||||
//! piCout << sl.removeDuplicates(); // {"1", "2", "3"}
|
||||
//! \endcode
|
||||
PIStringList& PIStringList::removeDuplicates() {
|
||||
PIStringList & PIStringList::removeDuplicates() {
|
||||
PIStringList l;
|
||||
PIString s;
|
||||
bool ae;
|
||||
for (int i = 0; i < size_s(); ++i) {
|
||||
ae = false;
|
||||
s = at(i);
|
||||
s = at(i);
|
||||
for (int j = 0; j < l.size_s(); ++j) {
|
||||
if (s != l[j]) continue;
|
||||
ae = true; break;
|
||||
ae = true;
|
||||
break;
|
||||
}
|
||||
if (!ae) {
|
||||
l << s;
|
||||
|
||||
@@ -5,22 +5,22 @@
|
||||
* \~russian Основанный на \a PIDeque<PIString> массив строк
|
||||
*/
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
Strings array class
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
PIP - Platform Independent Primitives
|
||||
Strings array class
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@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 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.
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef PISTRINGLIST_H
|
||||
@@ -33,33 +33,55 @@
|
||||
//! \~\brief
|
||||
//! \~english Based on \a PIDeque<PIString> strings list.
|
||||
//! \~russian Основанный на \a PIDeque<PIString> массив строк.
|
||||
class PIP_EXPORT PIStringList: public PIDeque<PIString>
|
||||
{
|
||||
class PIP_EXPORT PIStringList: public PIDeque<PIString> {
|
||||
public:
|
||||
|
||||
//! \~english Contructs an empty strings list
|
||||
//! \~russian Создает пустой список строк
|
||||
PIStringList() {;}
|
||||
PIStringList() { ; }
|
||||
|
||||
//! \~english Contructs strings list with one string "str"
|
||||
//! \~russian Создает список строк с одной строкой "str"
|
||||
PIStringList(const PIString & str) {push_back(str);}
|
||||
PIStringList(PIString && str) {push_back(std::move(str));}
|
||||
PIStringList(const PIString & str) { push_back(str); }
|
||||
PIStringList(PIString && str) { push_back(std::move(str)); }
|
||||
|
||||
//! \~english Contructs strings list with strings "s0" and "s1"
|
||||
//! \~russian Создает список строк со строками "s0" и "s1"
|
||||
PIStringList(const PIString & s0, const PIString & s1) {push_back(s0); push_back(s1);}
|
||||
PIStringList(PIString && s0, PIString && s1) {push_back(std::move(s0)); push_back(std::move(s1));}
|
||||
PIStringList(const PIString & s0, const PIString & s1) {
|
||||
push_back(s0);
|
||||
push_back(s1);
|
||||
}
|
||||
PIStringList(PIString && s0, PIString && s1) {
|
||||
push_back(std::move(s0));
|
||||
push_back(std::move(s1));
|
||||
}
|
||||
|
||||
//! \~english Contructs strings list with strings "s0", "s1" and "s2"
|
||||
//! \~russian Создает список строк со строками "s0", "s1" и "s2"
|
||||
PIStringList(const PIString & s0, const PIString & s1, const PIString & s2) {push_back(s0); push_back(s1); push_back(s2);}
|
||||
PIStringList(PIString && s0, PIString && s1, PIString && s2) {push_back(std::move(s0)); push_back(std::move(s1)); push_back(std::move(s2));}
|
||||
PIStringList(const PIString & s0, const PIString & s1, const PIString & s2) {
|
||||
push_back(s0);
|
||||
push_back(s1);
|
||||
push_back(s2);
|
||||
}
|
||||
PIStringList(PIString && s0, PIString && s1, PIString && s2) {
|
||||
push_back(std::move(s0));
|
||||
push_back(std::move(s1));
|
||||
push_back(std::move(s2));
|
||||
}
|
||||
|
||||
//! \~english Contructs strings list with strings "s0", "s1", "s2" and "s3"
|
||||
//! \~russian Создает список строк со строками "s0", "s1", "s2" и "s3"
|
||||
PIStringList(const PIString & s0, const PIString & s1, const PIString & s2, const PIString & s3) {push_back(s0); push_back(s1); push_back(s2); push_back(s3);}
|
||||
PIStringList(PIString && s0, PIString && s1, PIString && s2, PIString && s3) {push_back(std::move(s0)); push_back(std::move(s1)); push_back(std::move(s2)); push_back(std::move(s3));}
|
||||
PIStringList(const PIString & s0, const PIString & s1, const PIString & s2, const PIString & s3) {
|
||||
push_back(s0);
|
||||
push_back(s1);
|
||||
push_back(s2);
|
||||
push_back(s3);
|
||||
}
|
||||
PIStringList(PIString && s0, PIString && s1, PIString && s2, PIString && s3) {
|
||||
push_back(std::move(s0));
|
||||
push_back(std::move(s1));
|
||||
push_back(std::move(s2));
|
||||
push_back(std::move(s3));
|
||||
}
|
||||
|
||||
//! \~english Contructs strings list with strings "o"
|
||||
//! \~russian Создает список строк со строками "o"
|
||||
@@ -68,11 +90,19 @@ public:
|
||||
|
||||
//! \~english Contructs strings list with strings "o"
|
||||
//! \~russian Создает список строк со строками "o"
|
||||
PIStringList(const PIVector<PIString> & o): PIDeque<PIString>() {resize(o.size()); for (uint i = 0; i < size(); ++i) (*this)[i] = o[i];}
|
||||
PIStringList(const PIVector<PIString> & o): PIDeque<PIString>() {
|
||||
resize(o.size());
|
||||
for (uint i = 0; i < size(); ++i)
|
||||
(*this)[i] = o[i];
|
||||
}
|
||||
|
||||
//! \~english Contructs strings list with strings "o"
|
||||
//! \~russian Создает список строк со строками "o"
|
||||
PIStringList(const PIDeque<PIString> & o): PIDeque<PIString>() {resize(o.size()); for (uint i = 0; i < size(); ++i) (*this)[i] = o[i];}
|
||||
PIStringList(const PIDeque<PIString> & o): PIDeque<PIString>() {
|
||||
resize(o.size());
|
||||
for (uint i = 0; i < size(); ++i)
|
||||
(*this)[i] = o[i];
|
||||
}
|
||||
|
||||
//! \~english Contructs strings list with strings "init_list" in std::initializer_list format
|
||||
//! \~russian Создает список строк со строками "init_list" в формате std::initializer_list
|
||||
@@ -87,8 +117,14 @@ public:
|
||||
//! \~russian Удаляет все строки равные "value" и возвращает ссылку на этот список строк
|
||||
PIStringList & removeStrings(const PIString & value);
|
||||
|
||||
PIStringList & remove(uint num) {PIDeque<PIString>::remove(num); return *this;}
|
||||
PIStringList & remove(uint num, uint count) {PIDeque<PIString>::remove(num, count); return *this;}
|
||||
PIStringList & remove(uint num) {
|
||||
PIDeque<PIString>::remove(num);
|
||||
return *this;
|
||||
}
|
||||
PIStringList & remove(uint num, uint count) {
|
||||
PIDeque<PIString>::remove(num, count);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Remove duplicated strings and returns reference to this
|
||||
//! \~russian Удаляет все дублированные строки и возвращает ссылку на этот список строк
|
||||
@@ -100,29 +136,50 @@ public:
|
||||
|
||||
//! \~english Returns sum of lengths of all strings
|
||||
//! \~russian Возвращает сумму длин всех строк
|
||||
uint contentSize() {uint s = 0; for (uint i = 0; i < size(); ++i) s += at(i).size(); return s;}
|
||||
uint contentSize() {
|
||||
uint s = 0;
|
||||
for (uint i = 0; i < size(); ++i)
|
||||
s += at(i).size();
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Compare operator
|
||||
//! \~russian Оператор сравнения
|
||||
bool operator ==(const PIStringList & o) const {if (size() != o.size()) return false; for (size_t i = 0; i < size(); ++i) if (o[i] != (*this)[i]) return false; return true;}
|
||||
bool operator==(const PIStringList & o) const {
|
||||
if (size() != o.size()) return false;
|
||||
for (size_t i = 0; i < size(); ++i)
|
||||
if (o[i] != (*this)[i]) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
//! \~english Compare operator
|
||||
//! \~russian Оператор сравнения
|
||||
bool operator !=(const PIStringList & o) const {return !(o == (*this));}
|
||||
bool operator!=(const PIStringList & o) const { return !(o == (*this)); }
|
||||
|
||||
//! \~english Assign operator
|
||||
//! \~russian Оператор присваивания
|
||||
PIStringList & operator =(const PIStringList & o) {PIDeque<PIString>::operator=(o); return *this;}
|
||||
PIStringList & operator=(const PIStringList & o) {
|
||||
PIDeque<PIString>::operator=(o);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Append string "str"
|
||||
//! \~russian Добавляет строку "str"
|
||||
PIStringList & operator <<(const PIString & str) {append(str); return *this;}
|
||||
PIStringList & operator <<(PIString && str) {append(std::move(str)); return *this;}
|
||||
PIStringList & operator<<(const PIString & str) {
|
||||
append(str);
|
||||
return *this;
|
||||
}
|
||||
PIStringList & operator<<(PIString && str) {
|
||||
append(std::move(str));
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Append strings list "sl"
|
||||
//! \~russian Добавляет список строк "sl"
|
||||
PIStringList & operator <<(const PIStringList & sl) {append(sl); return *this;}
|
||||
|
||||
PIStringList & operator<<(const PIStringList & sl) {
|
||||
append(sl);
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -146,6 +203,17 @@ BINARY_STREAM_READ(PIStringList) {
|
||||
//! \relatesalso PICout
|
||||
//! \~english Output operator to \a PICout
|
||||
//! \~russian Оператор вывода в \a PICout
|
||||
inline PICout operator <<(PICout s, const PIStringList & v) {s.space(); s.saveAndSetControls(0); s << "{"; for (uint i = 0; i < v.size(); ++i) {s << "\"" << v[i] << "\""; if (i < v.size() - 1) s << ", ";} s << "}"; s.restoreControls(); return s;}
|
||||
inline PICout operator<<(PICout s, const PIStringList & v) {
|
||||
s.space();
|
||||
s.saveAndSetControls(0);
|
||||
s << "{";
|
||||
for (uint i = 0; i < v.size(); ++i) {
|
||||
s << "\"" << v[i] << "\"";
|
||||
if (i < v.size() - 1) s << ", ";
|
||||
}
|
||||
s << "}";
|
||||
s.restoreControls();
|
||||
return s;
|
||||
}
|
||||
|
||||
#endif // PISTRINGLIST_H
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
Module includes
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru
|
||||
PIP - Platform Independent Primitives
|
||||
Module includes
|
||||
Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@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 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.
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
//! \defgroup Text Text
|
||||
//! \~\brief
|
||||
@@ -51,8 +51,8 @@
|
||||
#ifndef PITEXTMODULE_H
|
||||
#define PITEXTMODULE_H
|
||||
|
||||
#include "pistringlist.h"
|
||||
#include "piconstchars.h"
|
||||
#include "pistringlist.h"
|
||||
#include "pitextstream.h"
|
||||
|
||||
#endif // PITEXTMODULE_H
|
||||
|
||||
@@ -3,24 +3,24 @@
|
||||
* \~\brief
|
||||
* \~english Text serialization functionality over PIBinaryStream
|
||||
* \~russian Функциональность текстовой сериализации поверх PIBinaryStream
|
||||
*/
|
||||
*/
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
Text serialization functionality over PIBinaryStream
|
||||
Ivan Pelipenko peri4ko@yandex.ru
|
||||
PIP - Platform Independent Primitives
|
||||
Text serialization functionality over PIBinaryStream
|
||||
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 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.
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef PITEXTSTREAM_H
|
||||
@@ -36,11 +36,10 @@
|
||||
template<typename P>
|
||||
class PITextStream {
|
||||
public:
|
||||
|
||||
//! \~english Floating-point numbers write format
|
||||
//! \~russian Формат записи чисел с плавающей точкой
|
||||
enum FloatFormat {
|
||||
DecimalFormat /** \~english Decimal format, "*.*" \~russian Десятичный формат, "*.*" */ = 'f',
|
||||
DecimalFormat /** \~english Decimal format, "*.*" \~russian Десятичный формат, "*.*" */ = 'f',
|
||||
ExponentFormat /** \~english Exponential format, "*e+-<E>" \~russian Экспонентный формат, "*e+-<E>" */ = 'e'
|
||||
};
|
||||
|
||||
@@ -53,51 +52,57 @@ public:
|
||||
|
||||
//! \~english Construct text stream binded to "stream_"
|
||||
//! \~russian Возвращает привязанный к "stream_" текстовый поток
|
||||
PITextStream(PIBinaryStream<P> * stream_) {setStream(stream_);}
|
||||
PITextStream(PIBinaryStream<P> * stream_) { setStream(stream_); }
|
||||
|
||||
//! \~english Returns binded PIBinaryStream
|
||||
//! \~russian Возвращает привязанный PIBinaryStream
|
||||
PIBinaryStream<P> * stream() const {return s;}
|
||||
PIBinaryStream<P> * stream() const { return s; }
|
||||
void setStream(PIBinaryStream<P> * stream_) {
|
||||
s = stream_;
|
||||
s = stream_;
|
||||
is_end = false;
|
||||
}
|
||||
|
||||
//! \~english Returns if end of stream reached
|
||||
//! \~russian Возвращает достигнут ли конец потока
|
||||
bool isEnd() const {return is_end;}
|
||||
bool isEnd() const { return is_end; }
|
||||
|
||||
//! \~english Returns read/write encoding
|
||||
//! \~russian Возвращает кодировку чтения/записи
|
||||
Encoding encoding() const {return enc;}
|
||||
Encoding encoding() const { return enc; }
|
||||
|
||||
//! \~english Set read/write encoding, default UTF8
|
||||
//! \~russian Устанавливает кодировку чтения/записи, по умолчанию UTF8
|
||||
void setEncoding(Encoding e) {enc = e;}
|
||||
void setEncoding(Encoding e) { enc = e; }
|
||||
|
||||
//! \~english Returns float numbers write format
|
||||
//! \~russian Возвращает формат записи чисел с плавающей точкой
|
||||
FloatFormat floatFormat() const {return format_;}
|
||||
FloatFormat floatFormat() const { return format_; }
|
||||
|
||||
//! \~english Set float numbers write format, default DecimalFormat
|
||||
//! \~russian Устанавливает формат записи чисел с плавающей точкой, по умолчанию DecimalFormat
|
||||
void setFloatFormat(FloatFormat format) {format_ = format;}
|
||||
void setFloatFormat(FloatFormat format) { format_ = format; }
|
||||
|
||||
//! \~english Returns float numbers write precision
|
||||
//! \~russian Возвращает точность записи чисел с плавающей точкой
|
||||
int floatPrecision() const {return prec_;}
|
||||
int floatPrecision() const { return prec_; }
|
||||
|
||||
//! \~english Set float numbers write precision to "prec_" digits, default 5
|
||||
//! \~russian Устанавливает точность записи чисел с плавающей точкой, по умолчанию 5
|
||||
void setFloatPrecision(int prec) {prec_ = prec;}
|
||||
void setFloatPrecision(int prec) { prec_ = prec; }
|
||||
|
||||
//! \~english Append space
|
||||
//! \~russian Добавляет пробел
|
||||
PITextStream<P> & space() {s->binaryStreamAppend(' '); return *this;}
|
||||
PITextStream<P> & space() {
|
||||
s->binaryStreamAppend(' ');
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Append new line
|
||||
//! \~russian Добавляет новую строку
|
||||
PITextStream<P> & newLine() {s->binaryStreamAppend('\n'); return *this;}
|
||||
PITextStream<P> & newLine() {
|
||||
s->binaryStreamAppend('\n');
|
||||
return *this;
|
||||
}
|
||||
|
||||
//! \~english Append "v" string
|
||||
//! \~russian Добавляет строку "v"
|
||||
@@ -106,42 +111,44 @@ public:
|
||||
PIByteArray d;
|
||||
switch (enc) {
|
||||
case System: d = v.toSystem(); break;
|
||||
case UTF8 : d = v.toUTF8(); break;
|
||||
case UTF8: d = v.toUTF8(); break;
|
||||
}
|
||||
s->binaryStreamAppend(d.data(), d.size());
|
||||
}
|
||||
|
||||
//! \~english Append "v" as ASCII
|
||||
//! \~russian Добавляет "v" как ASCII
|
||||
void append(const PIConstChars & v) {if (!v.isEmpty()) s->binaryStreamAppend(v.data(), v.size());}
|
||||
void append(const PIConstChars & v) {
|
||||
if (!v.isEmpty()) s->binaryStreamAppend(v.data(), v.size());
|
||||
}
|
||||
|
||||
//! \~english Append "v" char as character
|
||||
//! \~russian Добавляет "v" как символ
|
||||
void append(char v) {s->binaryStreamAppend(v);}
|
||||
void append(char v) { s->binaryStreamAppend(v); }
|
||||
|
||||
//! \~english Append "v" as ASCII
|
||||
//! \~russian Добавляет "v" как ASCII
|
||||
void append(const char * v) {append(PIConstChars(v));}
|
||||
void append(const char * v) { append(PIConstChars(v)); }
|
||||
|
||||
//! \~english Append boolean, "true" of "false"
|
||||
//! \~russian Добавляет логическое, "true" of "false"
|
||||
void append(bool v) {append(v ? "true" : "false");}
|
||||
void append(bool v) { append(v ? "true" : "false"); }
|
||||
|
||||
//! \~english Append integer
|
||||
//! \~russian Добавляет целое
|
||||
void append(int v) {append(PIString::fromNumber(v));}
|
||||
void append(int v) { append(PIString::fromNumber(v)); }
|
||||
|
||||
//! \~english Append integer
|
||||
//! \~russian Добавляет целое
|
||||
void append(llong v) {append(PIString::fromNumber(v));}
|
||||
void append(llong v) { append(PIString::fromNumber(v)); }
|
||||
|
||||
//! \~english Append floating-point number, using \a floatFormat() and \a floatPrecision()
|
||||
//! \~russian Добавляет число с плавающей точкой, используя \a floatFormat() и \a floatPrecision()
|
||||
void append(float v) {append(PIString::fromNumber(v, (char)format_, prec_));}
|
||||
void append(float v) { append(PIString::fromNumber(v, (char)format_, prec_)); }
|
||||
|
||||
//! \~english Append floating-point number, using \a floatFormat() and \a floatPrecision()
|
||||
//! \~russian Добавляет число с плавающей точкой, используя \a floatFormat() и \a floatPrecision()
|
||||
void append(double v) {append(PIString::fromNumber(v, (char)format_, prec_));}
|
||||
void append(double v) { append(PIString::fromNumber(v, (char)format_, prec_)); }
|
||||
|
||||
|
||||
//! \~english Read character
|
||||
@@ -162,8 +169,7 @@ public:
|
||||
for (;;) {
|
||||
char b = readChar(&ok);
|
||||
if (!ok || b == '\n') break;
|
||||
if (b != '\r')
|
||||
ret.append((uchar)b);
|
||||
if (b != '\r') ret.append((uchar)b);
|
||||
}
|
||||
return fromBytes(ret);
|
||||
}
|
||||
@@ -186,14 +192,14 @@ private:
|
||||
PIString fromBytes(const PIByteArray & ba) {
|
||||
switch (enc) {
|
||||
case System: return PIString::fromSystem(ba);
|
||||
case UTF8 : return PIString::fromUTF8(ba);
|
||||
case UTF8: return PIString::fromUTF8(ba);
|
||||
}
|
||||
return PIString();
|
||||
}
|
||||
PIString readUntil(const PIConstChars & chars) {
|
||||
//static PIConstChars spaces(" \t\n\r");
|
||||
// static PIConstChars spaces(" \t\n\r");
|
||||
bool ok = true;
|
||||
char c = skipWhile(chars, &ok);
|
||||
char c = skipWhile(chars, &ok);
|
||||
if (!ok) return PIString();
|
||||
PIByteArray ret;
|
||||
ret.append((uchar)c);
|
||||
@@ -207,7 +213,7 @@ private:
|
||||
// returns first non-"chars" char
|
||||
char skipWhile(const PIConstChars & chars, bool * rok) {
|
||||
bool ok = true;
|
||||
char c = 0;
|
||||
char c = 0;
|
||||
for (;;) {
|
||||
c = readChar(&ok);
|
||||
if (!ok || !chars.contains(c)) break;
|
||||
@@ -217,125 +223,230 @@ private:
|
||||
}
|
||||
|
||||
PIBinaryStream<P> * s;
|
||||
Encoding enc = UTF8;
|
||||
Encoding enc = UTF8;
|
||||
FloatFormat format_ = DecimalFormat;
|
||||
bool is_end = false;
|
||||
int prec_ = 5;
|
||||
|
||||
bool is_end = false;
|
||||
int prec_ = 5;
|
||||
};
|
||||
|
||||
|
||||
//! \~english Returns PITextStream for binary stream "stream"
|
||||
//! \~russian Возвращает PITextStream для бинарного потока "stream"
|
||||
template<typename P>
|
||||
inline PITextStream<P> createPITextStream(PIBinaryStream<P> * stream) {return PITextStream<P>(stream);}
|
||||
inline PITextStream<P> createPITextStream(PIBinaryStream<P> * stream) {
|
||||
return PITextStream<P>(stream);
|
||||
}
|
||||
|
||||
|
||||
//! \~english Append boolean
|
||||
//! \~russian Добавляет логическое
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, bool v) {s.append(v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, bool v) {
|
||||
s.append(v);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Append character
|
||||
//! \~russian Добавляет символ
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, char v) {s.append(v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, char v) {
|
||||
s.append(v);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Append integer
|
||||
//! \~russian Добавляет целое
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, uchar v) {s.append((int)v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, uchar v) {
|
||||
s.append((int)v);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Append integer
|
||||
//! \~russian Добавляет целое
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, short v) {s.append((int)v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, short v) {
|
||||
s.append((int)v);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Append integer
|
||||
//! \~russian Добавляет целое
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, ushort v) {s.append((int)v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, ushort v) {
|
||||
s.append((int)v);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Append integer
|
||||
//! \~russian Добавляет целое
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, int v) {s.append((int)v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, int v) {
|
||||
s.append((int)v);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Append integer
|
||||
//! \~russian Добавляет целое
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, uint v) {s.append((int)v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, uint v) {
|
||||
s.append((int)v);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Append integer
|
||||
//! \~russian Добавляет целое
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, llong v) {s.append((llong)v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, llong v) {
|
||||
s.append((llong)v);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Append integer
|
||||
//! \~russian Добавляет целое
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, ullong v) {s.append((llong)v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, ullong v) {
|
||||
s.append((llong)v);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Append floating-point number
|
||||
//! \~russian Добавляет число с плавающей точкой
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, float v) {s.append(v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, float v) {
|
||||
s.append(v);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Append floating-point number
|
||||
//! \~russian Добавляет число с плавающей точкой
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, double v) {s.append(v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, double v) {
|
||||
s.append(v);
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
//! \~english Append string
|
||||
//! \~russian Добавляет строку
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, const char * v) {s.append(v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, const char * v) {
|
||||
s.append(v);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Append string
|
||||
//! \~russian Добавляет строку
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, const PIConstChars & v) {s.append(v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, const PIConstChars & v) {
|
||||
s.append(v);
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Append string
|
||||
//! \~russian Добавляет строку
|
||||
template<typename P> inline PITextStream<P> & operator <<(PITextStream<P> & s, const PIString & v) {s.append(v); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator<<(PITextStream<P> & s, const PIString & v) {
|
||||
s.append(v);
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
//! \~english Read word as bool
|
||||
//! \~russian Читает слово как логическое
|
||||
template<typename P> inline PITextStream<P> & operator >>(PITextStream<P> & s, bool & v) {v = s.readWord().toBool(); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator>>(PITextStream<P> & s, bool & v) {
|
||||
v = s.readWord().toBool();
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Read character
|
||||
//! \~russian Читает символ
|
||||
template<typename P> inline PITextStream<P> & operator >>(PITextStream<P> & s, char & v) {v = s.readChar(); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator>>(PITextStream<P> & s, char & v) {
|
||||
v = s.readChar();
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Read word as integer
|
||||
//! \~russian Читает слово как целое
|
||||
template<typename P> inline PITextStream<P> & operator >>(PITextStream<P> & s, uchar & v) {v = s.readWord().toUInt(); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator>>(PITextStream<P> & s, uchar & v) {
|
||||
v = s.readWord().toUInt();
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Read word as integer
|
||||
//! \~russian Читает слово как целое
|
||||
template<typename P> inline PITextStream<P> & operator >>(PITextStream<P> & s, short & v) {v = s.readWord().toInt(); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator>>(PITextStream<P> & s, short & v) {
|
||||
v = s.readWord().toInt();
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Read word as integer
|
||||
//! \~russian Читает слово как целое
|
||||
template<typename P> inline PITextStream<P> & operator >>(PITextStream<P> & s, ushort & v) {v = s.readWord().toUInt(); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator>>(PITextStream<P> & s, ushort & v) {
|
||||
v = s.readWord().toUInt();
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Read word as integer
|
||||
//! \~russian Читает слово как целое
|
||||
template<typename P> inline PITextStream<P> & operator >>(PITextStream<P> & s, int & v) {v = s.readWord().toInt(); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator>>(PITextStream<P> & s, int & v) {
|
||||
v = s.readWord().toInt();
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Read word as integer
|
||||
//! \~russian Читает слово как целое
|
||||
template<typename P> inline PITextStream<P> & operator >>(PITextStream<P> & s, uint & v) {v = s.readWord().toUInt(); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator>>(PITextStream<P> & s, uint & v) {
|
||||
v = s.readWord().toUInt();
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Read word as integer
|
||||
//! \~russian Читает слово как целое
|
||||
template<typename P> inline PITextStream<P> & operator >>(PITextStream<P> & s, llong & v) {v = s.readWord().toLLong(); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator>>(PITextStream<P> & s, llong & v) {
|
||||
v = s.readWord().toLLong();
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Read word as integer
|
||||
//! \~russian Читает слово как целое
|
||||
template<typename P> inline PITextStream<P> & operator >>(PITextStream<P> & s, ullong & v) {v = s.readWord().toULLong(); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator>>(PITextStream<P> & s, ullong & v) {
|
||||
v = s.readWord().toULLong();
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Read word as floating-point number
|
||||
//! \~russian Читает слово как число с плавающей точкой
|
||||
template<typename P> inline PITextStream<P> & operator >>(PITextStream<P> & s, float & v) {v = s.readWord().toFloat(); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator>>(PITextStream<P> & s, float & v) {
|
||||
v = s.readWord().toFloat();
|
||||
return s;
|
||||
}
|
||||
|
||||
//! \~english Read word as floating-point number
|
||||
//! \~russian Читает слово как число с плавающей точкой
|
||||
template<typename P> inline PITextStream<P> & operator >>(PITextStream<P> & s, double & v) {v = s.readWord().toDouble(); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator>>(PITextStream<P> & s, double & v) {
|
||||
v = s.readWord().toDouble();
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
//! \~english Read word
|
||||
//! \~russian Читает слово
|
||||
template<typename P> inline PITextStream<P> & operator >>(PITextStream<P> & s, PIString & v) {v = s.readWord(); return s;}
|
||||
template<typename P>
|
||||
inline PITextStream<P> & operator>>(PITextStream<P> & s, PIString & v) {
|
||||
v = s.readWord();
|
||||
return s;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user