2022-09-11 02:48:30 +02:00
|
|
|
|
|
|
|
#ifndef __cxz_xindex_h__
|
|
|
|
#define __cxz_xindex_h__
|
|
|
|
|
|
|
|
#include "base/base.h"
|
|
|
|
#include "range_base.h"
|
|
|
|
#include "index_base.h"
|
|
|
|
|
|
|
|
namespace CNORXZ
|
|
|
|
{
|
|
|
|
// Future IndexWrapper
|
2022-09-18 16:19:27 +02:00
|
|
|
class XIndexBase
|
2022-09-11 02:48:30 +02:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
DEFAULT_MEMBERS(XIndexBase);
|
2022-09-18 16:19:27 +02:00
|
|
|
virtual XIndexPtr copy() const = 0;
|
|
|
|
virtual SizeT pos() const = 0;
|
2022-09-18 00:49:36 +02:00
|
|
|
|
2022-09-13 00:31:12 +02:00
|
|
|
virtual XIndexBase& operator=(SizeT pos) = 0;
|
2022-09-11 02:48:30 +02:00
|
|
|
virtual XIndexBase& operator++() = 0;
|
|
|
|
virtual XIndexBase& operator--() = 0;
|
2022-09-18 16:19:27 +02:00
|
|
|
virtual XIndexPtr operator+(Int n) const = 0;
|
|
|
|
virtual XIndexPtr operator-(Int n) const = 0;
|
2022-09-18 00:49:36 +02:00
|
|
|
virtual XIndexBase& operator+=(Int n) = 0;
|
|
|
|
virtual XIndexBase& operator-=(Int n) = 0;
|
|
|
|
|
|
|
|
virtual DType operator*() const = 0;
|
|
|
|
virtual DType operator->() const = 0;
|
|
|
|
|
2022-09-13 00:31:12 +02:00
|
|
|
virtual Int pp(PtrId idxPtrNum) = 0;
|
|
|
|
virtual Int mm(PtrId idxPtrNum) = 0;
|
2022-09-18 00:49:36 +02:00
|
|
|
|
|
|
|
virtual SizeT dim() const = 0;
|
|
|
|
virtual RangePtr range() const = 0;
|
|
|
|
virtual SizeT getStepSize(SizeT n) const = 0;
|
|
|
|
|
2022-09-13 00:31:12 +02:00
|
|
|
virtual String stringMeta() const = 0;
|
2022-09-11 02:48:30 +02:00
|
|
|
virtual DType meta() const = 0;
|
|
|
|
virtual XIndexBase& at(const DType& meta) = 0;
|
2022-09-18 00:49:36 +02:00
|
|
|
|
2022-09-15 16:45:45 +02:00
|
|
|
//virtual DExpr ifor(SizeT step, DExpr ex) const = 0;
|
|
|
|
//virtual DExpr iforh(SizeT step, DExpr ex) const = 0;
|
2022-09-11 02:48:30 +02:00
|
|
|
// ...!!!
|
|
|
|
};
|
|
|
|
|
2022-09-18 00:49:36 +02:00
|
|
|
//Sptr<XIndexBase>& operator++(Sptr<XIndexBase>& i);
|
|
|
|
//Sptr<XIndexBase>& operator--(Sptr<XIndexBase>& i);
|
|
|
|
|
2022-09-11 02:48:30 +02:00
|
|
|
// MultiIndex Wrapper:
|
|
|
|
template <class Index, typename Meta>
|
|
|
|
class XIndex : public XIndexBase
|
|
|
|
{
|
|
|
|
public:
|
2022-09-18 16:19:27 +02:00
|
|
|
|
|
|
|
DEFAULT_C(XIndex);
|
|
|
|
// no default copy/assignment (have to copy objects in shared ptr)
|
|
|
|
XIndex(const XIndex& i);
|
|
|
|
XIndex(XIndex&& i);
|
|
|
|
XIndex& operator=(const XIndex& i);
|
|
|
|
XIndex& operator=(XIndex&& i);
|
2022-09-11 02:48:30 +02:00
|
|
|
XIndex(const IndexPtr<Index,Meta>& i);
|
2022-09-15 16:45:45 +02:00
|
|
|
XIndex(const IndexInterface<Index,Meta>& i);
|
2022-09-11 02:48:30 +02:00
|
|
|
|
2022-09-18 16:19:27 +02:00
|
|
|
virtual XIndexPtr copy() const override final;
|
|
|
|
virtual SizeT pos() const override final;
|
|
|
|
|
2022-09-18 00:49:36 +02:00
|
|
|
virtual XIndex& operator=(SizeT pos) override final;
|
|
|
|
virtual XIndex& operator++() override final;
|
|
|
|
virtual XIndex& operator--() override final;
|
2022-09-18 16:19:27 +02:00
|
|
|
virtual XIndexPtr operator+(Int n) const override final;
|
|
|
|
virtual XIndexPtr operator-(Int n) const override final;
|
2022-09-18 00:49:36 +02:00
|
|
|
virtual XIndex& operator+=(Int n) override final;
|
|
|
|
virtual XIndex& operator-=(Int n) override final;
|
|
|
|
|
|
|
|
virtual DType operator*() const override final;
|
|
|
|
virtual DType operator->() const override final;
|
|
|
|
|
|
|
|
virtual Int pp(PtrId idxPtrNum) override final;
|
|
|
|
virtual Int mm(PtrId idxPtrNum) override final;
|
|
|
|
|
|
|
|
virtual SizeT dim() const override final;
|
|
|
|
virtual RangePtr range() const override final;
|
|
|
|
virtual SizeT getStepSize(SizeT n) const override final;
|
|
|
|
|
|
|
|
virtual String stringMeta() const override final;
|
|
|
|
virtual DType meta() const override final;
|
|
|
|
virtual XIndexBase& at(const DType& meta) override final;
|
|
|
|
|
|
|
|
//virtual DExpr ifor(SizeT step, DExpr ex) const override final;
|
|
|
|
//virtual DExpr iforh(SizeT step, DExpr ex) const override final;
|
2022-09-11 02:48:30 +02:00
|
|
|
// ....!!!!
|
2022-09-18 00:49:36 +02:00
|
|
|
|
|
|
|
private:
|
|
|
|
IndexPtr<Index,Meta> mI;
|
|
|
|
|
2022-09-11 02:48:30 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|