CL_ARRAY: A new generic library of multidimensional containers for c++ compilers with extension for OpenCL framework
design patterns : elements of reusable object - oriented software .