%description: Copying and assignment for messages %file: test.msg namespace @TESTNAME@; message Base { int a = 7; int b[2]; int c[]; } message MyMessage extends Base { string s1 = "one"; string s2[2]; string s3[]; }; %includes: #include "test_m.h" %global: void print(const char *what, MyMessage& x) { EV << what << ":"; EV << x.getA() << ":" << x.getB(0) << "," << x.getB(1) << ":"; for (int i=0; i<(int)x.getCArraySize(); i++) EV << (i==0 ? "" : ",") << (int)x.getC(i); EV << ":" << x.getS1() << ":" << x.getS2(0) << "," << x.getS2(1) << ":"; for (int j=0; j<(int)x.getS3ArraySize(); j++) EV << (j==0 ? "" : ",") << x.getS3(j); EV << "." << endl; } %activity: // set up tester classes MyMessage x; x.setCArraySize(2); x.setS3ArraySize(2); x.setA(39); x.setB(0,14); x.setB(1,23); x.setC(0,17); x.setC(1,35); x.setS2(0,"two"); x.setS2(1,"three"); x.setS3(0,"four"); x.setS3(1,"five"); MyMessage xx; xx.setCArraySize(5); xx.setS3ArraySize(5); xx.setC(0,11); xx.setC(4,44); xx.setS3(0,"six"); xx.setS3(4,"seven"); print("x", x); print("xx", xx); // copy constructor MyMessage x1(x); print("x1(x)",x1); // assigment MyMessage x2; x2 = x; print("x2=x",x2); // reassignment, with larger array size x1 = xx; print("x1=xx",x1); // reassignment, with smaller array size x1 = x; print("x1=x",x2); // check arrays and strings were deep copied x.setCArraySize(3); x.setS2(0,"aaa"); x.setS2(1,"bbb"); x.setS3(0,"ccc"); x.setS3(1,"ddd"); x.setS3ArraySize(3); print("x",x); print("x1",x1); // should stay the same %contains: stdout x:39:14,23:17,35:one:two,three:four,five. xx:7:0,0:11,0,0,0,44:one:,:six,,,,seven. x1(x):39:14,23:17,35:one:two,three:four,five. x2=x:39:14,23:17,35:one:two,three:four,five. x1=xx:7:0,0:11,0,0,0,44:one:,:six,,,,seven. x1=x:39:14,23:17,35:one:two,three:four,five. x:39:14,23:17,35,0:one:aaa,bbb:ccc,ddd,. x1:39:14,23:17,35:one:two,three:four,five.