#include <iostream>
#include <array>
#include <memory>
std::unique_ptr<float[]> data(new float[40]());
struct LinhaSobre4f
{
LinhaSobre4f(float * pos_begin, size_t size_):
pos0(pos_begin),
size_(size_){}
std::array<float, 4> & operator[](size_t i)const
{
std::array<float,4> * r =
reinterpret_cast<std::array<float,4>*> (pos0+(4*i));
return *r;
}
size_t size()const
{
return size_;
}
private:
float * pos0;
size_t size_;
};
int main() {
LinhaSobre4f l(data.get()+(3*4), 4);
//assigning from container
for(size_t i = 0; i < l.size(); i++)
l[i] = { {1.5f, 2.5f, 3.5f, 4.5f} };
//printing from data itself
for(size_t i = 0; i < 10; i++)
{
std::cout << "f4 " << i << " : " ;
for(size_t j = 0; j < 4; j++)
std::cout << data[i*4+j] << " ";
std::cout << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxtZW1vcnk+CgpzdGQ6OnVuaXF1ZV9wdHI8ZmxvYXRbXT4gZGF0YShuZXcgZmxvYXRbNDBdKCkpOwoKc3RydWN0IExpbmhhU29icmU0Zgp7CiAgICBMaW5oYVNvYnJlNGYoZmxvYXQgKiBwb3NfYmVnaW4sIHNpemVfdCBzaXplXyk6CiAgICAgICAgcG9zMChwb3NfYmVnaW4pLAogICAgICAgIHNpemVfKHNpemVfKXt9CiAgICBzdGQ6OmFycmF5PGZsb2F0LCA0PiAmIG9wZXJhdG9yW10oc2l6ZV90IGkpY29uc3QKICAgIHsKICAgICAgICBzdGQ6OmFycmF5PGZsb2F0LDQ+ICogciA9IAogICAgICAgICAgICByZWludGVycHJldF9jYXN0PHN0ZDo6YXJyYXk8ZmxvYXQsND4qPiAocG9zMCsoNCppKSk7CiAgICAgICAgcmV0dXJuICpyOwogICAgfQogICAgc2l6ZV90IHNpemUoKWNvbnN0CiAgICB7CiAgICAJcmV0dXJuIHNpemVfOwogICAgfQpwcml2YXRlOgogICAgZmxvYXQgKiBwb3MwOwogICAgc2l6ZV90IHNpemVfOwp9OwoKaW50IG1haW4oKSB7CglMaW5oYVNvYnJlNGYgbChkYXRhLmdldCgpKygzKjQpLCA0KTsKCS8vYXNzaWduaW5nIGZyb20gY29udGFpbmVyCiAgICAJZm9yKHNpemVfdCBpID0gMDsgaSA8IGwuc2l6ZSgpOyBpKyspCiAgICAJCWxbaV0gPSB7IHsxLjVmLCAyLjVmLCAzLjVmLCA0LjVmfSB9OwoJLy9wcmludGluZyBmcm9tIGRhdGEgaXRzZWxmCiAgICAJZm9yKHNpemVfdCBpID0gMDsgaSA8IDEwOyBpKyspCiAgICAJewogICAgCQlzdGQ6OmNvdXQgPDwgImY0ICIgPDwgaSA8PCAiIDogIiA7CiAgICAJCWZvcihzaXplX3QgaiA9IDA7IGogPCA0OyBqKyspCiAgICAJCQlzdGQ6OmNvdXQgPDwgZGF0YVtpKjQral0gPDwgIiAiOwogICAgCQlzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogICAgCX0KCXJldHVybiAwOwp9