#include "pip.h" class ROString { public: inline ROString() : len(0), str(nullptr) {} inline ROString(const char * string) { str = string; len = strlen(string); } inline ROString(const char * data, size_t size) { str = data; len = size; } // inline ROString(const char string[]) { // str = string; // len = sizeof(string); // } inline const char & operator[](size_t pos) const {return str[pos];} inline const char * data() const {return str;} inline bool isEmpty() const {return len == 0;} inline bool isNotEmpty() const {return len > 0;} inline size_t length() const {return len;} inline size_t size() const {return len;} inline ssize_t size_s() const {return len;} //! \~\brief //! \~english Assign operator. //! \~russian Оператор присваивания. inline ROString & operator =(const ROString & s) { if (this == &s) return *this; len = s.len; str = s.str; return *this; } //! \~\brief //! \~english Assign move operator. //! \~russian Оператор перемещающего присваивания. inline ROString & operator =(ROString && s) { swap(s); return *this; } inline void swap(ROString& v) { piSwap(str, v.str); piSwap(len, v.len); } private: size_t len; const char * str; }; PICout operator <<(PICout s, const ROString & v) { s.space(); s.quote(); s.write(v.data(), v.size()); s.quote(); return s; } int main(int argc, char * argv[]) { const char * dd = "12345"; char text[]{ "hello" }; ROString s("test"); piCout << s; ROString s2; piCout << s2; s2 = s; piCout << s2; s2 = text; s = s2; piCout << s << s2; // s2 = s; text[1] = '0'; piCout << text; piCout << s << s2 << ROString(text, 3); // piCout << s << s2; // PIString ss(s.data(), s.length()); // piCout << ss; PICout(PICoutManipulators::DefaultControls | PICoutManipulators::AddQuotes) << PIString(dd); piCout << PIString::fromUTF8("test"); piCout << PIString::fromUTF8("бюд\n"); piCout.writePIString(PIString::fromUTF8("test\n")); piCout.writePIString(PIString::fromUTF8("бюд\n")); piCout << "бюд\n"; return 0; }