#ifndef __cxz_darray_base_h__ #define __cxz_darray_base_h__ #include #include #include #include #include "base/base.h" #include "aindex.h" //#include "operation/" namespace CNORXZ { template class DArrayBase { public: typedef AIndex const_iterator; protected: RangePtr mRange; public: DArrayBase(const RangePtr& range); DEFAULT_MEMBERS(DArrayBase); virtual ~DArrayBase() = default; template const T& operator[](const IndexInterface& i) const; template const T& at(const IndexInterface& i) const; template Sptr> sl(const IndexInterface& i) const; virtual const T* data() const = 0; virtual SizeT pmax() const = 0; // max allocated postion of data() (exclusive!) virtual SizeT size() const; virtual RangePtr range() const; virtual const_iterator begin() const; virtual const_iterator end() const; virtual const_iterator cbegin() const = 0; virtual const_iterator cend() const = 0; virtual bool isView() const = 0; //template //ConstOperationRoot operator()(const IndexPtr& i) const; }; template class MDArrayBase : public DArrayBase { public: typedef DArrayBase DAB; typedef typename DAB::const_iterator const_iterator; typedef BIndex iterator; using DAB::operator[]; using DAB::at; using DAB::data; using DAB::begin; using DAB::end; using DAB::cbegin; using DAB::cend; //using DAB::operator(); MDArrayBase(const RangePtr& range); DEFAULT_MEMBERS(MDArrayBase); template T& operator[](const IndexInterface& i); template T& at(const IndexInterface& i); template Sptr> sl(const IndexInterface& i); virtual T* data() = 0; virtual iterator begin(); virtual iterator end(); //template //OperationRoot operator()(const IndexPtr& i); }; } #endif