98 lines
2.2 KiB
C++
98 lines
2.2 KiB
C++
#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<typename X>
|
|
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<typename T> inline void regtype() {
|
|
h = new Helper<T>();
|
|
}
|
|
};
|
|
*/
|
|
|
|
|
|
int main() {
|
|
PIByteArray ba;
|
|
// TypeHelper th;
|
|
// th.regtype<MM>();
|
|
MM m;
|
|
PIVector<MM> 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>();
|
|
// 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;
|
|
}
|
|
|