// Description: AbstractArray class
// Detail: Allows to work with multidimensional arrays abstractly
#ifndef PASTELSYS_ABSTRACTARRAY_H
#define PASTELSYS_ABSTRACTARRAY_H
#include "pastel/sys/mytypes.h"
#include "pastel/sys/vector.h"
namespace Pastel
{
    template <integer N, typename Type>
    class ConstAbstractArray
    {
    public:
        virtual ~ConstAbstractArray()
        {
        }
        virtual Vector<integer, N> extent() const = 0;
        virtual Type operator()(
            const Vector<integer, N>& position) const = 0;
    };
    template <integer N, typename Type>
    class AbstractArray
        : public ConstAbstractArray<N, Type>
    {
    public:
        virtual ~AbstractArray()
        {
        }
        virtual void setExtent(
            const Vector<integer, N>& extent) = 0;
        virtual void write(
            const Vector<integer, N>& position,
            const Type& data) = 0;
    };
}
#endif