// -*- C++ -*- #ifndef __single_range_h__ #define __single_range_h__ #include #include #include #include "base_def.h" #include "index_base.h" #include "range_base.h" namespace MultiArrayTools { template class SingleIndex : public IndexInterface { public: typedef IndexBase IB; typedef U MetaType; typedef SingleRange RangeType; //DEFAULT_MEMBERS_X(SingleIndex); SingleIndex(const std::shared_ptr >& range); virtual IndexType type() const override; virtual SingleIndex& operator=(size_t pos) override; virtual SingleIndex& operator++() override; virtual SingleIndex& operator--() override; virtual size_t pp(std::shared_ptr& idxPtr) override; virtual size_t mm(std::shared_ptr& idxPtr) override; virtual U meta() const override; virtual SingleIndex& at(const U& metaPos) override; virtual size_t dim() const override; // = 1 virtual bool last() const override; virtual bool first() const override; virtual std::shared_ptr getPtr(size_t n) const override; virtual std::string id() const override { return std::string("sin") + std::to_string(IB::mId); } }; template class SingleRangeFactory : public RangeFactoryBase { public: typedef SingleRange oType; SingleRangeFactory() = delete; SingleRangeFactory(const std::vector& space); std::shared_ptr create(); }; template class SingleRange : public RangeInterface > { public: typedef RangeBase RB; typedef typename RangeInterface >::IndexType IndexType; virtual size_t size() const override; virtual size_t dim() const override; const U& get(size_t pos) const; size_t getMeta(const U& metaPos) const; virtual IndexType begin() const override; virtual IndexType end() const override; virtual std::shared_ptr index() const override; friend SingleRangeFactory; protected: SingleRange() = delete; SingleRange(const SingleRange& in) = delete; SingleRange(const std::vector& space); std::vector mSpace; }; /* // specializaions template <> class SingleRange : public RangeBase > { public: typedef typename RangeBase >::IndexType IndexType; static SingleRange oType() { return SingleRange(); } virtual size_t size() const override; int get(size_t pos) const; size_t getMeta(int metaPos) const; virtual MultiRangeType type() const override; SingleIndex begin() const override; SingleIndex end() const override; protected: SingleRange(size_t ext); size_t mExt; }; template <> class SingleRange : public RangeBase > { public: typedef typename RangeBase >::IndexType IndexType; static SingleRange oType() { return SingleRange(); } virtual size_t size() const override; size_t get(size_t pos) const; size_t getMeta(size_t metaPos) const; virtual MultiRangeType type() const override; SingleIndex begin() const override; SingleIndex end() const override; protected: SingleRange(size_t ext); size_t mExt; }; template <> class SingleRange : public RangeBase > { public: typedef typename RangeBase >::IndexType IndexType; static SingleRange oType() { return SingleRange(); } virtual size_t size() const override; size_t get(size_t pos) const; size_t getMeta(size_t metaPos) const; virtual MultiRangeType type() const override; SingleIndex begin() const override; SingleIndex end() const override; protected: SingleRange(size_t num); size_t mNum; }; enum class VET { VALUE = 0, ERROR = 1 }; std::ostream& operator<<(std::ostream& os, VET vet); template <> class SingleRange : public RangeBase > { public: typedef typename RangeBase >::IndexType IndexType; static SingleRange oType() { return SingleRange(); } virtual size_t size() const override; VET get(size_t pos) const; size_t getMeta(VET metaPos) const; virtual MultiRangeType type() const override; SingleIndex begin() const override; SingleIndex end() const override; }; template <> class SingleRange : public RangeBase > { public: typedef typename RangeBase >::IndexType IndexType; static SingleRange oType() { return SingleRange(); } virtual size_t size() const override; size_t get(size_t pos) const; size_t getMeta(size_t metaPos) const; virtual MultiRangeType type() const override; SingleIndex begin() const override; SingleIndex end() const override; }; */ } #include "single_range.cc" #endif