/* * arrayview.h * * Created on: Mar 18, 2017 * Author: gregor */ #ifndef GLTB_ARRAYVIEW_H_ #define GLTB_ARRAYVIEW_H_ #include #include namespace gltb { template class ArrayView { public: ArrayView(void *data, size_t offset, size_t stride) : data(data), offset(offset), stride(stride) { if(stride == 0) { actualStride = sizeof(T); } else { actualStride = stride; } } T &operator[] (size_t index) { char *buffer = (char*) data; return *(T*)(buffer + offset + index * actualStride); } const T &operator[] (size_t index) const { char *buffer = (char*) data; return *(T*)(buffer + offset + index * actualStride); } private: void *data; size_t offset; size_t stride; size_t actualStride; }; } #endif /* GLTB_ARRAYVIEW_H_ */