00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include "Data.hpp"
00040 #include "DataStream.hpp"
00041 #include "Serialization.hpp"
00042
00043 using_serialization;
00044
00045 class Aclass: public VSerializeable { VSERIALIZEABLE;
00046 public:
00047 uint32_t x;
00048 uint8_t y;
00049 int8_t z;
00050 bool b;
00051 char* text;
00052 std::string str;
00053 std::vector<uint8_t> v;
00054 Aclass* vclass;
00055 bool vcls;
00056
00057 Aclass(bool vcls = false) {
00058 text = new char[80];
00059 strcpy(text, "Hallo!");
00060 str = "std::string:)";
00061 x = 0x01020304;
00062 y = 0xF;
00063 z = -2;
00064 b = 0;
00065 this->vcls = vcls;
00066 v.push_back(0xA0);
00067 v.push_back(0xB0);
00068 v.push_back(0xC0);
00069 v.push_back(0xD0);
00070 if (vcls) vclass = new Aclass();
00071 else vclass = NULL;
00072 }
00073
00074 void clean() {
00075 text = NULL;
00076 str = "";
00077 x = 0;
00078 y = 0;
00079 b = 1;
00080 z = 0;
00081 v.clear();
00082 vclass = NULL;
00083 }
00084
00085 void view(bool ret = true) {
00086 printf("obj=[%08X, %1X, %d, %d, '%s', '%s' ", x, y, z, b, text, str.c_str());
00087 for (size_t i = 0; i < v.size(); i++)
00088 printf("%02X ", v[i]);
00089 if (vclass != NULL) vclass->view(false);
00090 printf("]");
00091 if (ret) printf("\n");
00092 }
00093 };
00094
00095 sznBeginDefault( Aclass, X ){
00096 X && x && b && I(y,6) && T(text) && T(str) && A(v,4) && I(z) && vcls;
00097 if (vcls) X && VO(vclass);
00098 }sznEnd()
00099
00100 vsznDefault( Aclass );
00101
00102 int main() {
00103 using namespace std;
00104
00105 Aclass a(true);
00106 Data data = data_serialize(a);
00107 a.view();
00108 cout << "length=" << data_length(a) / 8 << endl;
00109 cout << "data=" << data << endl;
00110
00111 Aclass b(true);
00112 b.clean();
00113 b.view();
00114 data_deserialize(b, data);
00115 b.view();
00116
00117 VSerializeable *c = &b;
00118 cout << "length=" << data_length(c) / 8 << endl;
00119 cout << "data=" << (data = data_serialize(c)) << endl;
00120 Aclass d;
00121 d.clean();
00122 data_deserialize(&d, data);
00123 d.view();
00124 cout << "--- test successful." << endl;
00125
00126 return 0;
00127 }
00128
00129