29.07.2011 - fundamental new
This commit is contained in:
236
pistring.h
236
pistring.h
@@ -2,112 +2,179 @@
|
||||
#define PISTRING_H
|
||||
|
||||
#include "pibytearray.h"
|
||||
#include "pichar.h"
|
||||
|
||||
class PIStringList;
|
||||
|
||||
class PIString: public PIVector<char>
|
||||
class PIString: public PIVector<PIChar>
|
||||
{
|
||||
public:
|
||||
PIString() {;}
|
||||
PIString(const char & c) {*this += c;}
|
||||
|
||||
//inline PIString & operator +=(const char c) {push_back(c); return *this;}
|
||||
PIString & operator +=(const PIChar c) {push_back(c); return *this;}
|
||||
PIString & operator +=(const char * str);
|
||||
PIString & operator +=(const string & str) {appendFromChars(str.c_str(), str.length()); return *this;}
|
||||
PIString & operator +=(const PIByteArray & ba) {appendFromChars((const char * )ba.data(), ba.size_s()); return *this;}
|
||||
PIString & operator +=(const PIString & str);
|
||||
PIString & operator +=(const wstring & str);
|
||||
|
||||
//PIString(const char c) {*this += c;}
|
||||
PIString(const PIChar c) {*this += c;}
|
||||
PIString(const char * str) {*this += str;}
|
||||
PIString(const string & str) {*this += str;}
|
||||
PIString(const wstring & str) {*this += str;}
|
||||
PIString(const PIString & str) {*this += str;}
|
||||
PIString(const PIByteArray & ba) {*this += ba;}
|
||||
PIString(const int len, const char c = ' ') {for (int i = 0; i < len; ++i) push_back(c);}
|
||||
PIString(const char * str, const int len) {*this += string(str, len);}
|
||||
PIString(const int len, const char c) {for (int i = 0; i < len; ++i) push_back(c);}
|
||||
PIString(const int len, const PIChar & c) {for (int i = 0; i < len; ++i) push_back(c);}
|
||||
|
||||
operator const char*() {return data();}
|
||||
operator const string() {return (size() == 0) ? string() : string(&at(0), size());}
|
||||
inline char & operator [](const int pos) {return at(pos);}
|
||||
inline const char operator [](const int pos) const {return at(pos);}
|
||||
|
||||
PIString & operator +=(const PIString & str);
|
||||
PIString & operator +=(const PIByteArray & ba);
|
||||
inline PIString & operator +=(const char & c) {push_back(c); return *this;}
|
||||
PIString & operator +=(const char * str);
|
||||
PIString & operator +=(const string & str);
|
||||
operator const string() {if (size() == 0) return string(); string s; for (int i = 0; i < length(); ++i) s.push_back(at(i).toAscii()); return s;}
|
||||
#ifdef WINDOWS
|
||||
PIChar operator [](const int pos) const __attribute__ ((optimize(0))) {return at(pos);}
|
||||
#else
|
||||
PIChar operator [](const int pos) const {return at(pos);}
|
||||
#endif
|
||||
PIChar & operator [](const int pos) {return at(pos);}
|
||||
|
||||
bool operator ==(const PIString & str) const;
|
||||
inline bool operator ==(const PIByteArray & ba) const {return *this == PIString(ba);}
|
||||
inline bool operator ==(const char & c) const {return *this == PIString(c);}
|
||||
inline bool operator ==(const char * str) const {return *this == PIString(str);}
|
||||
inline bool operator ==(const string & str) const {return *this == PIString(str);}
|
||||
bool operator ==(const PIChar c) const {return *this == PIString(c);}
|
||||
//inline bool operator ==(const char c) const {return *this == PIString(c);}
|
||||
bool operator ==(const char * str) const {return *this == PIString(str);}
|
||||
bool operator ==(const string & str) const {return *this == PIString(str);}
|
||||
|
||||
bool operator !=(const PIString & str) const;
|
||||
inline bool operator !=(const PIByteArray & ba) const {return *this != PIString(ba);}
|
||||
inline bool operator !=(const char & c) const {return *this != PIString(c);}
|
||||
inline bool operator !=(const char * str) const {return *this != PIString(str);}
|
||||
inline bool operator !=(const string & str) const {return *this != PIString(str);}
|
||||
bool operator !=(const PIChar c) const {return *this != PIString(c);}
|
||||
//inline bool operator !=(const char c) const {return *this != PIString(c);}
|
||||
bool operator !=(const char * str) const {return *this != PIString(str);}
|
||||
bool operator !=(const string & str) const {return *this != PIString(str);}
|
||||
|
||||
inline PIString & operator <<(const PIString & str) {*this += str; return *this;}
|
||||
inline PIString & operator <<(const PIByteArray & ba) {*this += ba; return *this;}
|
||||
inline PIString & operator <<(const char & c) {*this += c; return *this;}
|
||||
inline PIString & operator <<(const char * str) {*this += str; return *this;}
|
||||
inline PIString & operator <<(const string & str) {*this += str; return *this;}
|
||||
inline PIString & operator <<(const int & num) {*this += PIString::fromNumber(num); return *this;}
|
||||
inline PIString & operator <<(const short & num) {*this += PIString::fromNumber(num); return *this;}
|
||||
inline PIString & operator <<(const long & num) {*this += PIString::fromNumber(num); return *this;}
|
||||
inline PIString & operator <<(const float & num) {*this += PIString::fromNumber(num); return *this;}
|
||||
inline PIString & operator <<(const double & num) {*this += PIString::fromNumber(num); return *this;}
|
||||
bool operator <(const PIString & str) const;
|
||||
bool operator <(const PIChar c) const {return *this < PIString(c);}
|
||||
//inline bool operator <(const char c) const {return *this < PIString(c);}
|
||||
bool operator <(const char * str) const {return *this < PIString(str);}
|
||||
bool operator <(const string & str) const {return *this < PIString(str);}
|
||||
|
||||
bool operator >(const PIString & str) const;
|
||||
bool operator >(const PIChar c) const {return *this > PIString(c);}
|
||||
//inline bool operator >(const char c) const {return *this > PIString(c);}
|
||||
bool operator >(const char * str) const {return *this > PIString(str);}
|
||||
bool operator >(const string & str) const {return *this > PIString(str);}
|
||||
|
||||
bool operator <=(const PIString & str) const {return !(*this > str);}
|
||||
bool operator <=(const PIChar c) const {return *this <= PIString(c);}
|
||||
//inline bool operator <=(const char c) const {return *this <= PIString(c);}
|
||||
bool operator <=(const char * str) const {return *this <= PIString(str);}
|
||||
bool operator <=(const string & str) const {return *this <= PIString(str);}
|
||||
|
||||
bool operator >=(const PIString & str) const {return !(*this < str);}
|
||||
bool operator >=(const PIChar c) const {return *this >= PIString(c);}
|
||||
//inline bool operator >=(const char c) const {return *this >= PIString(c);}
|
||||
bool operator >=(const char * str) const {return *this >= PIString(str);}
|
||||
bool operator >=(const string & str) const {return *this >= PIString(str);}
|
||||
|
||||
PIString & operator <<(const PIString & str) {*this += str; return *this;}
|
||||
//inline PIString & operator <<(const char c) {*this += c; return *this;}
|
||||
PIString & operator <<(const PIChar c) {*this += c; return *this;}
|
||||
PIString & operator <<(const char * str) {*this += str; return *this;}
|
||||
PIString & operator <<(const string & str) {*this += str; return *this;}
|
||||
PIString & operator <<(const int & num) {*this += PIString::fromNumber(num); return *this;}
|
||||
PIString & operator <<(const short & num) {*this += PIString::fromNumber(num); return *this;}
|
||||
PIString & operator <<(const long & num) {*this += PIString::fromNumber(num); return *this;}
|
||||
PIString & operator <<(const float & num) {*this += PIString::fromNumber(num); return *this;}
|
||||
PIString & operator <<(const double & num) {*this += PIString::fromNumber(num); return *this;}
|
||||
|
||||
PIString mid(const int start, const int len = -1) const;
|
||||
inline PIString left(const int len) const {return len <= 0 ? PIString() : mid(0, len);}
|
||||
inline PIString right(const int len) const {return len <= 0 ? PIString() : mid(size() - len, len);}
|
||||
PIString left(const int len) const {return len <= 0 ? PIString() : mid(0, len);}
|
||||
PIString right(const int len) const {return len <= 0 ? PIString() : mid(size() - len, len);}
|
||||
PIString & cutMid(const int start, const int len);
|
||||
inline PIString & cutLeft(const int len) {return len <= 0 ? *this : cutMid(0, len);}
|
||||
inline PIString & cutRight(const int len) {return len <= 0 ? *this : cutMid(size() - len, len);}
|
||||
PIString trimmed() const;
|
||||
PIString & cutLeft(const int len) {return len <= 0 ? *this : cutMid(0, len);}
|
||||
PIString & cutRight(const int len) {return len <= 0 ? *this : cutMid(size() - len, len);}
|
||||
PIString & trim();
|
||||
const char * data() const {return stdString().c_str();}
|
||||
string stdString() const {return (size() == 0) ? string() : string(&at(0), size());}
|
||||
PIStringList split(const PIString & delim);
|
||||
PIString trimmed() const;
|
||||
PIString & replace(const int from, const int count, const PIString & with);
|
||||
PIString replaced(const int from, const int count, const PIString & with) const {PIString str(*this); str.replace(from, count, with); return str;}
|
||||
PIString & replace(const PIString & what, const PIString & with, bool * ok = 0);
|
||||
PIString replaced(const PIString & what, const PIString & with, bool * ok = 0) const {PIString str(*this); str.replace(what, with, ok); return str;}
|
||||
PIString & replaceAll(const PIString & what, const PIString & with);
|
||||
PIString replaceAll(const PIString & what, const PIString & with) const {PIString str(*this); str.replaceAll(what, with); return str;}
|
||||
PIString & insert(const int index, const PIChar & c) {PIVector<PIChar>::insert(index, c); return *this;}
|
||||
PIString & insert(const int index, const char & c) {return insert(index, PIChar(c));}
|
||||
PIString & insert(const int index, const PIString & str);
|
||||
PIString & insert(const int index, const char * c) {return insert(index, PIString(c));}
|
||||
PIString & expandRightTo(const int len, const PIChar & c) {if (len > length()) resize(len, c); return *this;}
|
||||
PIString & expandLeftTo(const int len, const PIChar & c) {if (len > length()) insert(0, PIString(len - length(), c)); return *this;}
|
||||
|
||||
const char * data() {std_string = convertToStd(); return std_string.c_str();}
|
||||
const string stdString() const {return convertToStd();}
|
||||
wstring stdWString() const {return convertToWString();}
|
||||
PIByteArray toByteArray() {convertToStd(); return PIByteArray(std_string.c_str(), std_string.length());}
|
||||
PIStringList split(const PIString & delim) const;
|
||||
|
||||
PIString toUpperCase() const;
|
||||
PIString toLowerCase() const;
|
||||
PIString toNativeDecimalPoints() const {PIString s(*this); if (currentLocale == 0) return s; return s.replaceAll(".", currentLocale->decimal_point);}
|
||||
|
||||
int find(const char str, const int start = 0);
|
||||
int find(const PIString str, const int start = 0);
|
||||
inline int find(const char * str, const int start = 0) {return find(PIString(str), start);}
|
||||
inline int find(const string str, const int start = 0) {return find(PIString(str), start);}
|
||||
int findLast(const char str, const int start = 0);
|
||||
int findLast(const PIString str, const int start = 0);
|
||||
inline int findLast(const char * str, const int start = 0) {return findLast(PIString(str), start);}
|
||||
inline int findLast(const string str, const int start = 0) {return findLast(PIString(str), start);}
|
||||
int find(const char str, const int start = 0) const;
|
||||
int find(const PIString str, const int start = 0) const;
|
||||
int find(const char * str, const int start = 0) const {return find(PIString(str), start);}
|
||||
int find(const string str, const int start = 0) const {return find(PIString(str), start);}
|
||||
int findLast(const char str, const int start = 0) const;
|
||||
int findLast(const PIString str, const int start = 0) const;
|
||||
int findLast(const char * str, const int start = 0) const {return findLast(PIString(str), start);}
|
||||
int findLast(const string str, const int start = 0) const {return findLast(PIString(str), start);}
|
||||
|
||||
inline int length() const {return size();}
|
||||
inline bool isEmpty() const {return size() == 0;}
|
||||
int length() const {return size();}
|
||||
bool isEmpty() const {return (size() == 0 || *this == "");}
|
||||
|
||||
int toInt() const {return atoi(data());}
|
||||
short toShort() const {return (short)atoi(data());}
|
||||
long toLong() const {return atol(data());}
|
||||
float toFloat() const {return (float)atof(data());}
|
||||
double toDouble() const {return atof(data());}
|
||||
inline PIByteArray toBase64() {return PIByteArray(data(), size()).toBase64();}
|
||||
bool toBool() const {PIString s(*this); if (atof(s.toNativeDecimalPoints().data()) > 0. || s.trimmed().toLowerCase() == "true") return true; return false;}
|
||||
char toChar() const;
|
||||
short toShort() const;
|
||||
int toInt() const;
|
||||
long toLong() const;
|
||||
llong toLLong() const;
|
||||
float toFloat() const {PIString s(*this); return (float)atof(s.toNativeDecimalPoints().data());}
|
||||
double toDouble() const {PIString s(*this); return atof(s.toNativeDecimalPoints().data());}
|
||||
ldouble toLDouble() const {PIString s(*this); return atof(s.toNativeDecimalPoints().data());}
|
||||
|
||||
inline PIString & setNumber(const int value) {clear(); *this += itos(value); return *this;}
|
||||
inline PIString & setNumber(const short value) {clear(); *this += itos(value); return *this;}
|
||||
inline PIString & setNumber(const long value) {clear(); *this += ltos(value); return *this;}
|
||||
inline PIString & setNumber(const float value) {clear(); *this += ftos(value); return *this;}
|
||||
inline PIString & setNumber(const double value) {clear(); *this += dtos(value); return *this;}
|
||||
//inline PIString & setNumber(const char value) {clear(); *this += itos(value); return *this;}
|
||||
PIString & setNumber(const int value) {clear(); *this += itos(value); return *this;}
|
||||
PIString & setNumber(const short value) {clear(); *this += itos(value); return *this;}
|
||||
PIString & setNumber(const long value) {clear(); *this += ltos(value); return *this;}
|
||||
PIString & setNumber(const float value) {clear(); *this += ftos(value); return *this;}
|
||||
PIString & setNumber(const double value) {clear(); *this += dtos(value); return *this;}
|
||||
PIString & setNumber(const ldouble value) {clear(); *this += dtos(value); return *this;}
|
||||
|
||||
inline static PIString fromNumber(const int value) {return PIString(itos(value));}
|
||||
inline static PIString fromNumber(const uint value) {return PIString(itos(value));}
|
||||
inline static PIString fromNumber(const short value) {return PIString(itos(value));}
|
||||
inline static PIString fromNumber(const long value) {return PIString(ltos(value));}
|
||||
inline static PIString fromNumber(const float value) {return PIString(ftos(value));}
|
||||
inline static PIString fromNumber(const double value) {return PIString(dtos(value));}
|
||||
//inline static PIString fromNumber(const char value) {return PIString(itos(value));}
|
||||
static PIString fromNumber(const int value) {return PIString(itos(value));}
|
||||
static PIString fromNumber(const uint value) {return PIString(itos(value));}
|
||||
static PIString fromNumber(const short value) {return PIString(itos(value));}
|
||||
static PIString fromNumber(const long value) {return PIString(ltos(value));}
|
||||
static PIString fromNumber(const float value) {return PIString(ftos(value));}
|
||||
static PIString fromNumber(const double value) {return PIString(dtos(value));}
|
||||
static PIString fromNumber(const ldouble value) {return PIString(dtos(value));}
|
||||
static PIString fromBool(const bool value) {return PIString(value ? "true" : "false");}
|
||||
|
||||
private:
|
||||
void appendFromChars(const char * c, int s);
|
||||
string convertToStd() const;
|
||||
wstring convertToWString() const {wstring s; for (int i = 0; i < length(); ++i) s.push_back(at(i).toWChar()); return s;}
|
||||
|
||||
string std_string;
|
||||
|
||||
};
|
||||
|
||||
inline std::ostream & operator <<(std::ostream & s, const PIString & v) {for (int i = 0; i < v.length(); ++i) s << v[i]; return s;}
|
||||
|
||||
inline PIString operator +(const PIString & str, const PIString & f) {PIString s(str); s += f; return s;}
|
||||
|
||||
inline PIString operator +(const PIString & f, const PIByteArray & ba) {PIString s(f); s += ba; return s;}
|
||||
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;}
|
||||
inline PIString operator +(const PIString & f, const char * str) {PIString s(f); s += str; return s;}
|
||||
inline PIString operator +(const PIString & f, const string & str) {PIString s(f); s += str; return s;}
|
||||
|
||||
inline PIString operator +(const PIByteArray & ba, const PIString & f) {return PIString(ba) + f;}
|
||||
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;}
|
||||
inline PIString operator +(const char * str, const PIString & f) {return PIString(str) + f;}
|
||||
inline PIString operator +(const string & str, const PIString & f) {return PIString(str) + f;}
|
||||
|
||||
@@ -119,20 +186,29 @@ class PIStringList: public PIVector<PIString>
|
||||
public:
|
||||
PIStringList() {;}
|
||||
PIStringList(const PIString & str) {push_back(str);}
|
||||
PIStringList(const PIString & s0, const PIString & s1) {push_back(s0); push_back(s1);}
|
||||
PIStringList(const PIString & s0, const PIString & s1, const PIString & s2) {push_back(s0); push_back(s1); push_back(s2);}
|
||||
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);}
|
||||
|
||||
inline PIString join(const PIString & delim) const {PIString s; for (uint i = 0; i < size(); ++i) {s += at(i); if (i < size() - 1) s += delim;} return s;}
|
||||
PIString join(const PIString & delim) const {PIString s; for (uint i = 0; i < size(); ++i) {s += at(i); if (i < size() - 1) s += delim;} return s;}
|
||||
PIStringList & removeStrings(const PIString & value) {for (uint i = 0; i < size(); ++i) {if (at(i) == value) {remove(i); --i;}} return *this;}
|
||||
PIStringList & remove(uint num) {PIVector<PIString>::remove(num); return *this;}
|
||||
PIStringList & remove(uint num, uint count) {PIVector<PIString>::remove(num, count); return *this;}
|
||||
PIStringList & removeDuplicates();
|
||||
uint contentSize() {uint s = 0; for (uint i = 0; i < size(); ++i) s += at(i).size(); return s;}
|
||||
|
||||
inline PIStringList & operator <<(const PIString & str) {push_back(str); return *this;}
|
||||
inline PIStringList & operator <<(const PIByteArray & ba) {push_back(ba); return *this;}
|
||||
inline PIStringList & operator <<(const char & c) {push_back(PIString(c)); return *this;}
|
||||
inline PIStringList & operator <<(const char * str) {push_back(PIString(str)); return *this;}
|
||||
inline PIStringList & operator <<(const string & str) {push_back(str); return *this;}
|
||||
inline PIStringList & operator <<(const int & num) {push_back(PIString::fromNumber(num)); return *this;}
|
||||
inline PIStringList & operator <<(const short & num) {push_back(PIString::fromNumber(num)); return *this;}
|
||||
inline PIStringList & operator <<(const long & num) {push_back(PIString::fromNumber(num)); return *this;}
|
||||
inline PIStringList & operator <<(const float & num) {push_back(PIString::fromNumber(num)); return *this;}
|
||||
inline PIStringList & operator <<(const double & num) {push_back(PIString::fromNumber(num)); return *this;}
|
||||
PIStringList & operator <<(const PIString & str) {push_back(str); return *this;}
|
||||
//inline PIStringList & operator <<(const char c) {push_back(PIString(c)); return *this;}
|
||||
PIStringList & operator <<(const char * str) {push_back(PIString(str)); return *this;}
|
||||
PIStringList & operator <<(const string & str) {push_back(str); return *this;}
|
||||
PIStringList & operator <<(const int & num) {push_back(PIString::fromNumber(num)); return *this;}
|
||||
PIStringList & operator <<(const short & num) {push_back(PIString::fromNumber(num)); return *this;}
|
||||
PIStringList & operator <<(const long & num) {push_back(PIString::fromNumber(num)); return *this;}
|
||||
PIStringList & operator <<(const float & num) {push_back(PIString::fromNumber(num)); return *this;}
|
||||
PIStringList & operator <<(const double & num) {push_back(PIString::fromNumber(num)); return *this;}
|
||||
|
||||
};
|
||||
|
||||
inline std::ostream & operator <<(std::ostream & s, const PIStringList & v) {s << "{"; for (uint i = 0; i < v.size(); ++i) {s << '\"' << v[i] << '\"'; if (i < v.size() - 1) s << ", ";} s << "}"; return s;}
|
||||
|
||||
#endif // PISTRING_H
|
||||
|
||||
Reference in New Issue
Block a user