- #include <iostream> 
- #include <memory> 
- #include <complex> 
-   
- class Slice{ 
- public: 
-     Slice(unsigned long Nx, unsigned long Ny) : 
-     	nx(Nx), 
-     	ny(Ny), 
-     	data(std::make_shared<std::complex<double>[]>(Nx*Ny)) 
-     {} 
-   
-     Slice(unsigned long Nx, unsigned long Ny, std::shared_ptr<std::complex<double>[]> data) : 
-     	nx(Nx), 
-     	ny(Ny), 
-     	data(data) 
-     {} 
-   
- private: 
-     unsigned long     nx; 
-     unsigned long     ny; 
-     std::shared_ptr<std::complex<double>[]> data; 
- }; 
-   
- class Volume{ 
- public: 
-     Volume(unsigned long Nx, unsigned long Ny, unsigned long Nz) : 
-     	nx(Nx), 
-     	ny(Ny), 
-     	nz(Nz), 
-         data(std::make_shared<std::complex<double>[]>(Nx * Ny * Nz)) 
-     { 
-     } 
-   
-     Slice get_slice(unsigned long zindex) 
-     { 
-         return Slice(nx, ny, std::shared_ptr<std::complex<double>[]>(data, &data[zindex * nx * ny])); 
-     } 
- private: 
-     // DATA: 
-     unsigned long     nx; 
-     unsigned long     ny; 
-     unsigned long     nz; 
-     std::shared_ptr<std::complex<double>[]> data; 
- }; 
-   
-   
-   
- int main(){ 
-     unsigned long Nx = 1; 
-     unsigned long Ny = 2; 
-     unsigned long Nz = 3; 
-   
-     Volume testVolume(Nx,Ny,Nz); 
-     /* initialise data in testVolume */ 
-     Slice slice = testVolume.get_slice(1); 
- } 
-   
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8Y29tcGxleD4KCmNsYXNzIFNsaWNlewpwdWJsaWM6CiAgICBTbGljZSh1bnNpZ25lZCBsb25nIE54LCB1bnNpZ25lZCBsb25nIE55KSA6CiAgICAJbngoTngpLAogICAgCW55KE55KSwKICAgIAlkYXRhKHN0ZDo6bWFrZV9zaGFyZWQ8c3RkOjpjb21wbGV4PGRvdWJsZT5bXT4oTngqTnkpKQogICAge30KCiAgICBTbGljZSh1bnNpZ25lZCBsb25nIE54LCB1bnNpZ25lZCBsb25nIE55LCBzdGQ6OnNoYXJlZF9wdHI8c3RkOjpjb21wbGV4PGRvdWJsZT5bXT4gZGF0YSkgOgogICAgCW54KE54KSwKICAgIAlueShOeSksCiAgICAJZGF0YShkYXRhKQogICAge30KCnByaXZhdGU6CiAgICB1bnNpZ25lZCBsb25nICAgICBueDsKICAgIHVuc2lnbmVkIGxvbmcgICAgIG55OwogICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6Y29tcGxleDxkb3VibGU+W10+IGRhdGE7Cn07CgpjbGFzcyBWb2x1bWV7CnB1YmxpYzoKICAgIFZvbHVtZSh1bnNpZ25lZCBsb25nIE54LCB1bnNpZ25lZCBsb25nIE55LCB1bnNpZ25lZCBsb25nIE56KSA6CiAgICAJbngoTngpLAogICAgCW55KE55KSwKICAgIAlueihOeiksCiAgICAgICAgZGF0YShzdGQ6Om1ha2Vfc2hhcmVkPHN0ZDo6Y29tcGxleDxkb3VibGU+W10+KE54ICogTnkgKiBOeikpCiAgICB7CiAgICB9CgogICAgU2xpY2UgZ2V0X3NsaWNlKHVuc2lnbmVkIGxvbmcgemluZGV4KQogICAgewogICAgICAgIHJldHVybiBTbGljZShueCwgbnksIHN0ZDo6c2hhcmVkX3B0cjxzdGQ6OmNvbXBsZXg8ZG91YmxlPltdPihkYXRhLCAmZGF0YVt6aW5kZXggKiBueCAqIG55XSkpOwogICAgfQpwcml2YXRlOgogICAgLy8gREFUQToKICAgIHVuc2lnbmVkIGxvbmcgICAgIG54OwogICAgdW5zaWduZWQgbG9uZyAgICAgbnk7CiAgICB1bnNpZ25lZCBsb25nICAgICBuejsKICAgIHN0ZDo6c2hhcmVkX3B0cjxzdGQ6OmNvbXBsZXg8ZG91YmxlPltdPiBkYXRhOwp9OwoKCgppbnQgbWFpbigpewogICAgdW5zaWduZWQgbG9uZyBOeCA9IDE7CiAgICB1bnNpZ25lZCBsb25nIE55ID0gMjsKICAgIHVuc2lnbmVkIGxvbmcgTnogPSAzOwoKICAgIFZvbHVtZSB0ZXN0Vm9sdW1lKE54LE55LE56KTsKICAgIC8qIGluaXRpYWxpc2UgZGF0YSBpbiB0ZXN0Vm9sdW1lICovCiAgICBTbGljZSBzbGljZSA9IHRlc3RWb2x1bWUuZ2V0X3NsaWNlKDEpOwp9Cg==