#ifndef PISTRING_H #define PISTRING_H #include "pibytearray.h" class PIStringList; class PIString: public PIVector { public: PIString() {;} PIString(const char & c) {*this += c;} PIString(const char * str) {*this += str;} PIString(const string & 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);} 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); 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 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);} 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;} 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 & 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 & 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 toUpperCase() const; PIString toLowerCase() const; 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);} inline int length() const {return size();} inline bool isEmpty() const {return size() == 0;} 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();} 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 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 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 * 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 * str, const PIString & f) {return PIString(str) + f;} inline PIString operator +(const string & str, const PIString & f) {return PIString(str) + f;} char chrUpr(char c); char chrLwr(char c); class PIStringList: public PIVector { public: PIStringList() {;} PIStringList(const PIString & str) {push_back(str);} 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;} 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;} }; #endif // PISTRING_H