#include "pip.h" #include "pivariantsimple.h" #pragma pack(push, 1) struct MM { int x; int x2; double y; char c[16]; int e2; int e; //PIPointd h; }; #pragma pack(pop) inline PIByteArray & operator <<(PIByteArray & ba, const MM & v) {piCout << "xep1"; ba << v.x << v.y << v.c; return ba;} inline PIByteArray & operator >>(PIByteArray & ba, MM & v) {piCout << "xep2"; ba >> v.x >> v.y >> v.c; return ba;} int Acnt = 0; class A { public: A() {moved = false; i = "constructor"; piCout << "A()"; ++Acnt;} A(const PIString & s): i(s) {moved = false; piCout << "A(String)"; ++Acnt;} A(const A & a): i(a.i) {moved = false; piCout << "copy A(&)"; ++Acnt;} A(A && a): i(std::move(a.i)) {moved = false; a.moved = true; piCout << "copy A(&&)"; ++Acnt;} ~A() {piCout << "~A()" << moved; --Acnt;} void swap(A & a) {piCout << "swap A()"; piSwap(i, a.i);} A & operator =(const A & a) {i = a.i; piCout << "= A&"; return *this;} A & operator =(A && a) {piSwap(i, a.i); a.moved = true; piCout << "= A&&)"; return *this;} PIString i; bool moved; MM m; static void F(int) {} }; inline PIByteArray & operator <<(PIByteArray & ba, const A & v) {ba << v.i << v.m; return ba;} inline PIByteArray & operator >>(PIByteArray & ba, A & v) {ba >> v.i >> v.m; return ba;} /* class HelperBase { public: virtual void bsl(PIByteArray & ba, void * o) = 0; }; template class Helper : public HelperBase { public: void bsl(PIByteArray & ba, void * o) override { ba << (*(X*)o); piCout << ba.size(); ba >> (*(X*)o); piCout << ba.size(); } }; class TypeHelper { public: HelperBase * h; template inline void regtype() { h = new Helper(); } }; */ int main() { PIByteArray ba; // TypeHelper th; // th.regtype(); MM m; PIVector vm; vm << m;; ba << m; piCout << ba.toHex(); ba.clear(); piCout << "==="; ba << vm; piCout << ba.toHex(); // th.h->bsl(ba, &m); // th.regtype(); // CAN_Raw c; // th.h->bsl(ba, &c); // PIVariantSimple v; // v.setValue(m); // ba = v.save(); // piCout << ba.toHex(); // PIVariantSimple v2; // v2.load(ba); // piCout << v2.save().toHex(); return 0; }