#include "pip.h" class ConstChars { public: inline ConstChars() : len(0), str(nullptr) {} inline ConstChars(const char * string) { str = string; len = strlen(string); } inline ConstChars(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 ConstChars & operator =(const ConstChars & s) { if (this == &s) return *this; len = s.len; str = s.str; return *this; } //! \~\brief //! \~english Assign move operator. //! \~russian Оператор перемещающего присваивания. inline ConstChars & operator =(ConstChars && s) { swap(s); return *this; } inline void swap(ConstChars& v) { piSwap(str, v.str); piSwap(len, v.len); } private: size_t len; const char * str; }; PICout operator <<(PICout s, const ConstChars & v) { s.space(); s.quote(); s.write(v.data(), v.size()); s.quote(); return s; } int main(int argc, char * argv[]) { PIVector v{1, 2, 3, 4, 5, 6}; PIVector> xv = v.reshape(3,2); piCout << xv; piCout << xv.flatten(); piCout << xv.reshape(2,3); return 0; }