fixes regarding last commit

This commit is contained in:
Christian Zimmermann 2019-03-14 19:10:06 +01:00
parent d8ecf51698
commit c277fbde53
7 changed files with 49 additions and 30 deletions

View file

@ -121,10 +121,10 @@ namespace MultiArrayTools
} }
template <class Range, typename... Args> template <class Range, typename... Args>
auto createRangeE(const Args&... args) auto createRangeE(Args&&... args)
-> std::shared_ptr<Range> -> std::shared_ptr<Range>
{ {
typename Range::Factory f(args...); typename Range::FType f(args...);
return createExplicit(f); return createExplicit(f);
} }

View file

@ -65,7 +65,7 @@ namespace MultiArrayTools
-> std::shared_ptr<Range>; -> std::shared_ptr<Range>;
template <class Range, typename... Args> template <class Range, typename... Args>
auto createRangeE(const Args&... args) auto createRangeE(Args&&... args)
-> std::shared_ptr<Range>; -> std::shared_ptr<Range>;
template <size_t N, class MArray> template <size_t N, class MArray>

View file

@ -83,6 +83,7 @@ namespace MultiArrayTools
virtual T* data() override; virtual T* data() override;
virtual vector<T>& vdata() { return mCont; } virtual vector<T>& vdata() { return mCont; }
virtual const vector<T>& vdata() const { return mCont; } virtual const vector<T>& vdata() const { return mCont; }
vector<T>&& vmove() { MAB::mInit = false; return std::move(mCont); }
virtual std::shared_ptr<MultiArrayBase<T,AnonymousRange> > anonymous(bool slice = false) const override; virtual std::shared_ptr<MultiArrayBase<T,AnonymousRange> > anonymous(bool slice = false) const override;
virtual std::shared_ptr<MultiArrayBase<T,AnonymousRange> > anonymousMove() override; virtual std::shared_ptr<MultiArrayBase<T,AnonymousRange> > anonymousMove() override;

View file

@ -439,7 +439,7 @@ namespace MultiArrayTools
template <class EC> template <class EC>
typename DynamicRange<EC>::MetaType DynamicRange<EC>::get(size_t pos) const typename DynamicRange<EC>::MetaType DynamicRange<EC>::get(size_t pos) const
{ {
std::vector<char> out(cmeta(nullptr,0)); vector<char> out(cmeta(nullptr,0));
cmeta(out.data(),pos); cmeta(out.data(),pos);
return out; return out;
} }

View file

@ -91,6 +91,8 @@ namespace MultiArrayTools
IndexWrapperBase& operator=(const IndexWrapperBase& in) = default; IndexWrapperBase& operator=(const IndexWrapperBase& in) = default;
IndexWrapperBase& operator=(IndexWrapperBase&& in) = default; IndexWrapperBase& operator=(IndexWrapperBase&& in) = default;
using AbstractIW::operator=;
template <class Expr> template <class Expr>
ExpressionHolder<Expr> ifor(size_t step, ExpressionHolder<Expr> ex) const; ExpressionHolder<Expr> ifor(size_t step, ExpressionHolder<Expr> ex) const;
@ -134,17 +136,17 @@ namespace MultiArrayTools
virtual IndexType type() const final { return mI->type(); } virtual IndexType type() const final { return mI->type(); }
virtual IndexWrapper& operator=(size_t pos) final { (*mI) = pos; return *this; } virtual IndexWrapper& operator=(size_t pos) override final { (*mI) = pos; return *this; }
virtual IndexWrapper& operator++() final { ++(*mI); return *this; } virtual IndexWrapper& operator++() override final { ++(*mI); return *this; }
virtual IndexWrapper& operator--() final { --(*mI); return *this; } virtual IndexWrapper& operator--() override final { --(*mI); return *this; }
virtual size_t pos() const final { return mI->pos(); } virtual size_t pos() const override final { return mI->pos(); }
virtual size_t max() const final { return mI->max(); } virtual size_t max() const override final { return mI->max(); }
virtual int pp(std::intptr_t idxPtrNum) final { return mI->pp(idxPtrNum); } virtual int pp(std::intptr_t idxPtrNum) override final { return mI->pp(idxPtrNum); }
virtual int mm(std::intptr_t idxPtrNum) final { return mI->mm(idxPtrNum); } virtual int mm(std::intptr_t idxPtrNum) override final { return mI->mm(idxPtrNum); }
virtual std::string stringMeta() const final { return mI->stringMeta(); } virtual std::string stringMeta() const override final { return mI->stringMeta(); }
//virtual DynamicMetaT meta() const final { return DynamicMetaT(mI->meta()); } //virtual DynamicMetaT meta() const final { return DynamicMetaT(mI->meta()); }
//virtual const DynamicMetaT* metaPtr() const final { return nullptr; } //virtual const DynamicMetaT* metaPtr() const final { return nullptr; }
IndexWrapper& at(const typename Index::MetaType& metaPos) { mI->at(metaPos); return *this; } IndexWrapper& at(const typename Index::MetaType& metaPos) { mI->at(metaPos); return *this; }
@ -152,24 +154,24 @@ namespace MultiArrayTools
//virtual bool isMeta(const U& metaPos) const final { return mI->isMeta(); } //virtual bool isMeta(const U& metaPos) const final { return mI->isMeta(); }
virtual size_t dim() const final { return mI->dim(); } virtual size_t dim() const override final { return mI->dim(); }
virtual bool last() const final { return mI->last(); } virtual bool last() const override final { return mI->last(); }
virtual bool first() const final { return mI->first(); } virtual bool first() const override final { return mI->first(); }
virtual std::shared_ptr<RangeBase> range() const final { return mI->range(); } virtual std::shared_ptr<RangeBase> range() const override final { return mI->range(); }
virtual size_t getStepSize(size_t n) const final { return mI->getStepSize(n); } virtual size_t getStepSize(size_t n) const override final { return mI->getStepSize(n); }
virtual size_t getStepSizeComp(std::intptr_t j) const final; virtual size_t getStepSizeComp(std::intptr_t j) const override final;
virtual std::intptr_t get() const final { return reinterpret_cast<std::intptr_t>(mI.get()); } virtual std::intptr_t get() const override final { return reinterpret_cast<std::intptr_t>(mI.get()); }
virtual std::intptr_t ptrNum() const final { return mI->ptrNum(); } virtual std::intptr_t ptrNum() const override final { return mI->ptrNum(); }
}; };
//typedef SingleRange<size_t,SpaceType::DYN> DynamicRange; //typedef SingleRange<size_t,SpaceType::DYN> DynamicRange;
template <class EC> template <class EC>
class DynamicIndex : public IndexInterface<DynamicIndex<EC>,std::vector<char>> class DynamicIndex : public IndexInterface<DynamicIndex<EC>,vector<char>>
{ {
private: private:
typedef vector<std::pair<std::shared_ptr<IndexW<EC>>,size_t>> IVecT; typedef vector<std::pair<std::shared_ptr<IndexW<EC>>,size_t>> IVecT;
@ -177,8 +179,8 @@ namespace MultiArrayTools
IVecT mIVec; IVecT mIVec;
public: public:
typedef IndexInterface<DynamicIndex<EC>,std::vector<char>> IB; typedef IndexInterface<DynamicIndex<EC>,vector<char>> IB;
typedef std::vector<char> MetaType; typedef vector<char> MetaType;
typedef DynamicRange<EC> RangeType; typedef DynamicRange<EC> RangeType;
typedef DynamicIndex IType; typedef DynamicIndex IType;
@ -287,7 +289,8 @@ namespace MultiArrayTools
typedef RangeBase RB; typedef RangeBase RB;
typedef DynamicIndex<EC> IndexType; typedef DynamicIndex<EC> IndexType;
typedef DynamicRange RangeType; typedef DynamicRange RangeType;
typedef std::vector<char> MetaType; typedef vector<char> MetaType;
typedef DynamicRangeFactory<EC> FType;
private: private:
DynamicRange() = default; DynamicRange() = default;

View file

@ -108,6 +108,7 @@ namespace MultiArrayTools
GenSingleRangeFactory() = delete; GenSingleRangeFactory() = delete;
GenSingleRangeFactory(const vector<U>& space); GenSingleRangeFactory(const vector<U>& space);
GenSingleRangeFactory(vector<U>&& space);
std::shared_ptr<RangeBase> create(); std::shared_ptr<RangeBase> create();
}; };
@ -264,6 +265,7 @@ namespace MultiArrayTools
GenSingleRange(const GenSingleRange& in) = delete; GenSingleRange(const GenSingleRange& in) = delete;
GenSingleRange(const vector<U>& space); GenSingleRange(const vector<U>& space);
GenSingleRange(vector<U>&& space);
vector<U> mSpace; vector<U> mSpace;
//std::map<U,size_t> mMSpace; //std::map<U,size_t> mMSpace;
@ -498,6 +500,12 @@ namespace MultiArrayTools
mProd = std::shared_ptr<oType>( new GenSingleRange<U,TYPE,S>( space ) ); mProd = std::shared_ptr<oType>( new GenSingleRange<U,TYPE,S>( space ) );
} }
template <typename U, SpaceType TYPE, size_t S>
GenSingleRangeFactory<U,TYPE,S>::GenSingleRangeFactory(vector<U>&& space)
{
mProd = std::shared_ptr<oType>( new GenSingleRange<U,TYPE,S>( space ) );
}
template <typename U, SpaceType TYPE, size_t S> template <typename U, SpaceType TYPE, size_t S>
std::shared_ptr<RangeBase> GenSingleRangeFactory<U,TYPE,S>::create() std::shared_ptr<RangeBase> GenSingleRangeFactory<U,TYPE,S>::create()
{ {
@ -519,6 +527,12 @@ namespace MultiArrayTools
//} //}
} }
template <typename U, SpaceType TYPE, size_t S>
GenSingleRange<U,TYPE,S>::GenSingleRange(vector<U>&& space) :
RangeInterface<GenSingleIndex<U,TYPE,S> >(),
mSpace(space), mMSpace(mSpace) {}
template <typename U, SpaceType TYPE, size_t S> template <typename U, SpaceType TYPE, size_t S>
const U& GenSingleRange<U,TYPE,S>::get(size_t pos) const const U& GenSingleRange<U,TYPE,S>::get(size_t pos) const
{ {

View file

@ -104,6 +104,7 @@ namespace MultiArrayTools
typedef ValueIndex<U> IndexType; typedef ValueIndex<U> IndexType;
typedef ValueRange RangeType; typedef ValueRange RangeType;
typedef U MetaType; typedef U MetaType;
typedef ValueRangeFactory<U> FType;
virtual size_t size() const final; virtual size_t size() const final;
virtual size_t dim() const final; virtual size_t dim() const final;
@ -111,8 +112,8 @@ namespace MultiArrayTools
virtual SpaceType spaceType() const final; virtual SpaceType spaceType() const final;
virtual DataHeader dataHeader() const final; virtual DataHeader dataHeader() const final;
virtual size_t typeNum() const = 0; virtual size_t typeNum() const final;
virtual size_t cmeta(char* target, size_t pos) const = 0; virtual size_t cmeta(char* target, size_t pos) const final;
virtual std::string stringMeta(size_t pos) const final; virtual std::string stringMeta(size_t pos) const final;
virtual vector<char> data() const final; virtual vector<char> data() const final;