#include <iostream>
#include <vector>
using namespace std;
struct Field2D {
struct size_type {
size_t dim1,dim2;
};
struct coordinates {
size_t c1,c2;
};
Field2D(size_type const & siz) : size_(siz), data_(size_.dim1*size_.dim2) {}
double get(coordinates const & coords) {
return data_[coords.c1*size_.dim2 + coords.c2];
}
//Other methods
private:
size_type size_;
vector<double> data_;
};
struct PositionVersusTime : public Field2D {
struct size_type { size_t nx, nt; };
struct coordinates { size_t x, t; };
PositionVersusTime(size_type const & siz) : Field2D({siz.nx, siz.nt}) { }
double get(coordinates const & coords) { return Field2D::get({coords.x, coords.t}); }
};
int main() {
PositionVersusTime::size_type siz;
siz.nx = 5;
siz.nt = 2;
PositionVersusTime myField(siz);
PositionVersusTime::coordinates coords;
coords.x = 2;
coords.t = 0;
auto out = myField.get(coords);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEZpZWxkMkQgewogIHN0cnVjdCBzaXplX3R5cGUgewogICAgIHNpemVfdCBkaW0xLGRpbTI7CiAgfTsKICBzdHJ1Y3QgY29vcmRpbmF0ZXMgewogICAgIHNpemVfdCBjMSxjMjsKICB9OwpGaWVsZDJEKHNpemVfdHlwZSBjb25zdCAmIHNpeikgOiBzaXplXyhzaXopLCBkYXRhXyhzaXplXy5kaW0xKnNpemVfLmRpbTIpIHt9CmRvdWJsZSBnZXQoY29vcmRpbmF0ZXMgY29uc3QgJiBjb29yZHMpIHsKICByZXR1cm4gZGF0YV9bY29vcmRzLmMxKnNpemVfLmRpbTIgKyBjb29yZHMuYzJdOwp9Ci8vT3RoZXIgbWV0aG9kcwpwcml2YXRlOgogIHNpemVfdHlwZSBzaXplXzsKICB2ZWN0b3I8ZG91YmxlPiBkYXRhXzsKfTsKCnN0cnVjdCBQb3NpdGlvblZlcnN1c1RpbWUgOiBwdWJsaWMgRmllbGQyRCB7CglzdHJ1Y3Qgc2l6ZV90eXBlIHsgc2l6ZV90IG54LCBudDsgfTsKCXN0cnVjdCBjb29yZGluYXRlcyB7IHNpemVfdCB4LCB0OyB9OwoJUG9zaXRpb25WZXJzdXNUaW1lKHNpemVfdHlwZSBjb25zdCAmIHNpeikgOiBGaWVsZDJEKHtzaXoubngsIHNpei5udH0pIHsgfQoJZG91YmxlIGdldChjb29yZGluYXRlcyBjb25zdCAmIGNvb3JkcykgeyByZXR1cm4gRmllbGQyRDo6Z2V0KHtjb29yZHMueCwgY29vcmRzLnR9KTsgfQp9OwoKaW50IG1haW4oKSB7CiAgIFBvc2l0aW9uVmVyc3VzVGltZTo6c2l6ZV90eXBlIHNpejsKICAgc2l6Lm54ID0gNTsKICAgc2l6Lm50ID0gMjsKICAgUG9zaXRpb25WZXJzdXNUaW1lIG15RmllbGQoc2l6KTsKICAgUG9zaXRpb25WZXJzdXNUaW1lOjpjb29yZGluYXRlcyBjb29yZHM7CiAgIGNvb3Jkcy54ID0gMjsKICAgY29vcmRzLnQgPSAwOwogICBhdXRvIG91dCA9IG15RmllbGQuZ2V0KGNvb3Jkcyk7CiAgIHJldHVybiAwOwp9