#include "VectorCpx.h"
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int main()
{
// You can redefine DATA_DIR to other directory
#define DATA_DIR ""
cout << "--------- VectorCpx --------" << endl;
VectorCpx v0;
v0.push_back(Complex(1)).push_back(Complex(2)).push_back(Complex(3));
cout << "v0 = " << v0 << endl;
fstream f0(DATA_DIR "V0.txt", ios::out);
v0 >> f0;
f0.close();
f0.open(DATA_DIR "V0.txt", ios::in);
v0 << f0;
f0.close();
cout << "--------- AdvVectorO --------" << endl;
AdvVectorO v1;
AdvVectorO v2(3, Complex(1.2, 3.4));
AdvVectorO v3 = v0;
v3[0].real(5.6);
v3[0].imag(7.8);
cout << v1 << v2 << v3;
cout << "v1 = " << v1;
cout << "v2 = " << v2;
cout << "v3 = " << v3;
cout << "v2*v3=" << v2 * v3 << endl;
fstream f1(DATA_DIR "V1.txt", ios::out);
fstream f2(DATA_DIR "V2.txt", ios::out);
fstream f3(DATA_DIR "V3.txt", ios::out);
v1 >> f1;
v2 >> f2 >> f3;
v3 >> f3;
f1.close();
f2.close();
f3.close();
f1.open(DATA_DIR "V1.txt", ios::in);
v1 << f1;
f1.close();
cout << "--------- AdvVectorI --------" << endl;
AdvVectorI v4(2, Complex(0.5, 0.6));
f1.open(DATA_DIR "V1.txt", ios::out);
v4 >> f1;
f1.close();
f1.open(DATA_DIR "V1.txt", ios::in);
f3.open(DATA_DIR "V3.txt", ios::in);
v4 << f1 << f3;
cout << "v4 = " << v4;
f1.close();
f3.close();
cout << "--------- AdvVectorIO --------" << endl;
AdvVectorIO v5 = v2, v6 = v3;
fstream f5(DATA_DIR "V5.DAT", ios::out | ios::binary);
fstream f6(DATA_DIR "V6.DAT", ios::out | ios::binary);
v5 >> f5;
v6 >> f5 >> f6;
f5.close();
f6.close();
f5.open(DATA_DIR "V5.DAT", ios::in | ios::binary);
f6.open(DATA_DIR "V6.DAT", ios::in | ios::binary);
AdvVectorIO v5a, v6a;
v5a << f5;
f5.clear(); // Clear the EOF state before seekg
f5.seekg(0); // Go to the first byte
v6a << f6 << f5;
cout << "v5a = " << v5a;
cout << "v6a = " << v6a;
f5.close();
f6.close();
cout << "--------- Polymorphism --------" << endl;
VectorCpx v7(3, Complex(1));
VectorCpx *A[4] = {&v7, &v3, &v4, &v5};
const char*S[4] = {DATA_DIR "A1.txt", DATA_DIR "A2.txt",
DATA_DIR "A3.txt", DATA_DIR "A4.txt"};
for(int i=0; i<4; ++i){
fstream f(S[i], ios::out | ios::binary);
cout << "Ouput A[" << i << "]" << endl;
*A[i] >> f;
f.close();
}
for(int i=0; i<4; ++i){
fstream f(S[i], ios::in | ios::binary);
*A[i] << f;
cout << "A[" << i << "] = " << *A[i] << endl;
f.close();
}
system("pause");
}
CiNpbmNsdWRlICJWZWN0b3JDcHguaCIKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjc3RkaW8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpCnsKICAgIC8vIFlvdSBjYW4gcmVkZWZpbmUgREFUQV9ESVIgdG8gb3RoZXIgZGlyZWN0b3J5CiAgICAjZGVmaW5lIERBVEFfRElSICIiCiAgICBjb3V0IDw8ICItLS0tLS0tLS0gICBWZWN0b3JDcHggIC0tLS0tLS0tIiA8PCBlbmRsOwogICAgVmVjdG9yQ3B4IHYwOwogICAgdjAucHVzaF9iYWNrKENvbXBsZXgoMSkpLnB1c2hfYmFjayhDb21wbGV4KDIpKS5wdXNoX2JhY2soQ29tcGxleCgzKSk7CiAgICBjb3V0IDw8ICJ2MCA9ICIgPDwgdjAgPDwgZW5kbDsKICAgIGZzdHJlYW0gZjAoREFUQV9ESVIgIlYwLnR4dCIsIGlvczo6b3V0KTsKICAgIHYwID4+IGYwOwogICAgZjAuY2xvc2UoKTsKICAgIGYwLm9wZW4oREFUQV9ESVIgIlYwLnR4dCIsIGlvczo6aW4pOwogICAgdjAgPDwgZjA7CiAgICBmMC5jbG9zZSgpOwogICAgCiAgICBjb3V0IDw8ICItLS0tLS0tLS0gICBBZHZWZWN0b3JPICAtLS0tLS0tLSIgPDwgZW5kbDsKICAgIEFkdlZlY3Rvck8gdjE7CiAgICBBZHZWZWN0b3JPIHYyKDMsIENvbXBsZXgoMS4yLCAzLjQpKTsKICAgIEFkdlZlY3Rvck8gdjMgPSB2MDsKICAgIHYzWzBdLnJlYWwoNS42KTsKICAgIHYzWzBdLmltYWcoNy44KTsKICAgIGNvdXQgPDwgdjEgPDwgdjIgPDwgdjM7CiAgICBjb3V0IDw8ICJ2MSA9ICIgPDwgdjE7CiAgICBjb3V0IDw8ICJ2MiA9ICIgPDwgdjI7CiAgICBjb3V0IDw8ICJ2MyA9ICIgPDwgdjM7CiAgICBjb3V0IDw8ICJ2Mip2Mz0iIDw8IHYyICogdjMgPDwgZW5kbDsKICAgIAogICAgZnN0cmVhbSBmMShEQVRBX0RJUiAiVjEudHh0IiwgaW9zOjpvdXQpOwogICAgZnN0cmVhbSBmMihEQVRBX0RJUiAiVjIudHh0IiwgaW9zOjpvdXQpOwogICAgZnN0cmVhbSBmMyhEQVRBX0RJUiAiVjMudHh0IiwgaW9zOjpvdXQpOwogICAgCiAgICB2MSA+PiBmMTsKICAgIHYyID4+IGYyID4+IGYzOwogICAgdjMgPj4gZjM7CiAgICAKICAgIGYxLmNsb3NlKCk7CiAgICBmMi5jbG9zZSgpOwogICAgZjMuY2xvc2UoKTsKICAgIAogICAgZjEub3BlbihEQVRBX0RJUiAiVjEudHh0IiwgaW9zOjppbik7CiAgICAgICAgdjEgPDwgZjE7CiAgICBmMS5jbG9zZSgpOwogICAgCiAgICBjb3V0IDw8ICItLS0tLS0tLS0gICBBZHZWZWN0b3JJICAtLS0tLS0tLSIgPDwgZW5kbDsKICAgIEFkdlZlY3RvckkgdjQoMiwgQ29tcGxleCgwLjUsIDAuNikpOwogICAgZjEub3BlbihEQVRBX0RJUiAiVjEudHh0IiwgaW9zOjpvdXQpOwogICAgdjQgPj4gZjE7CiAgICBmMS5jbG9zZSgpOwogICAgZjEub3BlbihEQVRBX0RJUiAiVjEudHh0IiwgaW9zOjppbik7CiAgICBmMy5vcGVuKERBVEFfRElSICJWMy50eHQiLCBpb3M6OmluKTsKICAgIHY0IDw8IGYxIDw8IGYzOwogICAgY291dCA8PCAidjQgPSAiIDw8IHY0OwogICAgCiAgICBmMS5jbG9zZSgpOwogICAgZjMuY2xvc2UoKTsKICAgIAogICAgCiAgICAKICAgIGNvdXQgPDwgIi0tLS0tLS0tLSAgIEFkdlZlY3RvcklPICAtLS0tLS0tLSIgPDwgZW5kbDsKICAgIEFkdlZlY3RvcklPIHY1ID0gdjIsIHY2ID0gdjM7CiAgICBmc3RyZWFtIGY1KERBVEFfRElSICJWNS5EQVQiLCBpb3M6Om91dCB8IGlvczo6YmluYXJ5KTsKICAgIGZzdHJlYW0gZjYoREFUQV9ESVIgIlY2LkRBVCIsIGlvczo6b3V0IHwgaW9zOjpiaW5hcnkpOwogICAgdjUgPj4gZjU7CiAgICB2NiA+PiBmNSA+PiBmNjsKICAgIGY1LmNsb3NlKCk7CiAgICBmNi5jbG9zZSgpOwogICAgCiAgICBmNS5vcGVuKERBVEFfRElSICJWNS5EQVQiLCBpb3M6OmluIHwgaW9zOjpiaW5hcnkpOwogICAgZjYub3BlbihEQVRBX0RJUiAiVjYuREFUIiwgaW9zOjppbiB8IGlvczo6YmluYXJ5KTsKICAgIEFkdlZlY3RvcklPIHY1YSwgdjZhOwogICAgdjVhIDw8IGY1OwogICAgZjUuY2xlYXIoKTsgICAgIC8vIENsZWFyIHRoZSBFT0Ygc3RhdGUgYmVmb3JlIHNlZWtnCiAgICBmNS5zZWVrZygwKTsgICAgLy8gR28gdG8gdGhlIGZpcnN0IGJ5dGUKICAgIHY2YSA8PCBmNiA8PCBmNTsKICAgIGNvdXQgPDwgInY1YSA9ICIgPDwgdjVhOwogICAgY291dCA8PCAidjZhID0gIiA8PCB2NmE7CiAgICAKICAgIGY1LmNsb3NlKCk7CiAgICBmNi5jbG9zZSgpOwogICAgCiAgICBjb3V0IDw8ICItLS0tLS0tLS0gICBQb2x5bW9ycGhpc20gIC0tLS0tLS0tIiA8PCBlbmRsOwogICAgVmVjdG9yQ3B4IHY3KDMsIENvbXBsZXgoMSkpOwogICAgVmVjdG9yQ3B4ICpBWzRdID0geyZ2NywgJnYzLCAmdjQsICZ2NX07CiAgICBjb25zdCBjaGFyKlNbNF0gPSB7REFUQV9ESVIgIkExLnR4dCIsIERBVEFfRElSICJBMi50eHQiLAogICAgICAgICAgICAgICAgICAgICAgICBEQVRBX0RJUiAiQTMudHh0IiwgREFUQV9ESVIgIkE0LnR4dCJ9OwogICAgZm9yKGludCBpPTA7IGk8NDsgKytpKXsKICAgICAgICBmc3RyZWFtIGYoU1tpXSwgaW9zOjpvdXQgfCBpb3M6OmJpbmFyeSk7CiAgICAgICAgY291dCA8PCAiT3VwdXQgQVsiIDw8IGkgPDwgIl0iIDw8IGVuZGw7CiAgICAgICAgKkFbaV0gPj4gZjsKICAgICAgICAKICAgICAgICBmLmNsb3NlKCk7CiAgICB9CiAgICBmb3IoaW50IGk9MDsgaTw0OyArK2kpewogICAgICAgIGZzdHJlYW0gZihTW2ldLCBpb3M6OmluIHwgaW9zOjpiaW5hcnkpOwogICAgICAgICpBW2ldIDw8IGY7CiAgICAgICAgY291dCA8PCAiQVsiIDw8IGkgPDwgIl0gPSAiIDw8ICpBW2ldIDw8IGVuZGw7CiAgICAgICAgZi5jbG9zZSgpOwogICAgfQoKICAgIHN5c3RlbSgicGF1c2UiKTsKfQo=