#include <vector>
#include <iostream>
#include <fstream>
#include <sstream>
class BaseSaveFile {
protected:
std::vector<float> first_vector;
public:
void fill_vector(std::vector<float> fill) {
first_vector = fill;
}
void show_vector() {
for ( auto x: first_vector )
std::cout << x << std::endl;
}
std::istream& load(std::istream& is){
size_t vsize;
if(is.read((char*)&vsize, sizeof(vsize))) {
first_vector.resize(vsize);
is.read((char*)first_vector.data(), vsize*sizeof(float));
}
return is;
}
std::ostream& save(std::ostream& os){
size_t vsize=first_vector.size();
os.write((char*)&vsize, sizeof(vsize));
os.write((char*)first_vector.data(), vsize*sizeof(float));
return os;
}
};
class DerivedSaveFile : public BaseSaveFile {
};
int main ( int argc, char **argv) {
DerivedSaveFile derived;
std::vector<float> fill;
for ( auto i = 0; i < 10; i++) {
fill.push_back(i);
}
derived.fill_vector(fill);
std::cout<<"Original:"<<std::endl;
derived.show_vector();
std::stringstream ios;
derived.save(ios);
ios.seekp(0);
std::cout<<"Reloaded:"<<std::endl;
DerivedSaveFile d2;
d2.load(ios);
d2.show_vector();
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHNzdHJlYW0+CgpjbGFzcyBCYXNlU2F2ZUZpbGUgewoKcHJvdGVjdGVkOgogICAgc3RkOjp2ZWN0b3I8ZmxvYXQ+IGZpcnN0X3ZlY3RvcjsKCnB1YmxpYzoKICAgIHZvaWQgZmlsbF92ZWN0b3Ioc3RkOjp2ZWN0b3I8ZmxvYXQ+IGZpbGwpIHsKICAgICAgICBmaXJzdF92ZWN0b3IgPSBmaWxsOwogICAgfQogICAgdm9pZCBzaG93X3ZlY3RvcigpIHsKICAgICAgICBmb3IgKCBhdXRvIHg6IGZpcnN0X3ZlY3RvciApCiAgICAgICAgc3RkOjpjb3V0IDw8IHggPDwgc3RkOjplbmRsOwogICAgfQogICAgc3RkOjppc3RyZWFtJiBsb2FkKHN0ZDo6aXN0cmVhbSYgaXMpewogICAgCXNpemVfdCB2c2l6ZTsgCiAgICAJaWYoaXMucmVhZCgoY2hhciopJnZzaXplLCBzaXplb2YodnNpemUpKSkgewogICAgCSAgICBmaXJzdF92ZWN0b3IucmVzaXplKHZzaXplKTsKICAgIAkgICAgaXMucmVhZCgoY2hhciopZmlyc3RfdmVjdG9yLmRhdGEoKSwgdnNpemUqc2l6ZW9mKGZsb2F0KSk7IAogICAgCX0KICAgIAlyZXR1cm4gaXM7IAogICAgfQogICAgc3RkOjpvc3RyZWFtJiBzYXZlKHN0ZDo6b3N0cmVhbSYgb3MpewogICAgCXNpemVfdCB2c2l6ZT1maXJzdF92ZWN0b3Iuc2l6ZSgpOyAKICAgIAlvcy53cml0ZSgoY2hhciopJnZzaXplLCBzaXplb2YodnNpemUpKTsKICAgIAlvcy53cml0ZSgoY2hhciopZmlyc3RfdmVjdG9yLmRhdGEoKSwgdnNpemUqc2l6ZW9mKGZsb2F0KSk7IAogICAgCXJldHVybiBvczsgCiAgICB9Cgp9OwoKCmNsYXNzIERlcml2ZWRTYXZlRmlsZSA6IHB1YmxpYyBCYXNlU2F2ZUZpbGUgewoKCn07CgoKaW50IG1haW4gKCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKCiAgICBEZXJpdmVkU2F2ZUZpbGUgZGVyaXZlZDsKICAgIHN0ZDo6dmVjdG9yPGZsb2F0PiBmaWxsOwogICAgZm9yICggYXV0byBpID0gMDsgaSA8IDEwOyBpKyspIHsKICAgICAgICBmaWxsLnB1c2hfYmFjayhpKTsKICAgIH0KICAgIGRlcml2ZWQuZmlsbF92ZWN0b3IoZmlsbCk7CiAgICAKICAgIHN0ZDo6Y291dDw8Ik9yaWdpbmFsOiI8PHN0ZDo6ZW5kbDsgCiAgICBkZXJpdmVkLnNob3dfdmVjdG9yKCk7CgogICAgc3RkOjpzdHJpbmdzdHJlYW0gaW9zOwogICAgZGVyaXZlZC5zYXZlKGlvcyk7IAogICAgaW9zLnNlZWtwKDApOyAKICAgCiAgICBzdGQ6OmNvdXQ8PCJSZWxvYWRlZDoiPDxzdGQ6OmVuZGw7IAogICAgRGVyaXZlZFNhdmVGaWxlIGQyOyAKICAgIGQyLmxvYWQoaW9zKTsKICAgIGQyLnNob3dfdmVjdG9yKCk7CiAgICAKfQ==