minor changes

This commit is contained in:
Christian Zimmermann 2020-09-09 10:12:20 +02:00
parent 59e4f4ecfd
commit e3afa8b8c1
2 changed files with 42 additions and 30 deletions

View file

@ -59,12 +59,12 @@ namespace MultiArrayTools
} }
template <class ROP> template <class ROP>
auto HighLevelOpRoot<ROP>::create(const std::shared_ptr<CI> ind1, template <class... Inds>
const std::shared_ptr<CI> ind2) auto HighLevelOpRoot<ROP>::xcreate(const std::shared_ptr<Inds>&... inds)
-> typename B::template RetT<CI,CI> -> typename B::template RetT<Inds...>
{ {
assert(0); assert(0);
return typename B::template RetT<CI,CI>(); return typename B::template RetT<Inds...>();
} }
template <class ROP> template <class ROP>
@ -160,15 +160,19 @@ namespace MultiArrayTools
template <class ROP, class OpF, size_t N> template <class ROP, class OpF, size_t N>
const ROP* HighLevelOp<ROP,OpF,N>::get() const const ROP* HighLevelOp<ROP,OpF,N>::get() const
{ assert(0); return nullptr; }
template <class ROP, class OpF, size_t N>
auto HighLevelOp<ROP,OpF,N>::create(const std::shared_ptr<CI> ind1,
const std::shared_ptr<CI> ind2)
-> typename B::template RetT<CI,CI>
{ {
typename B::template RetT<CI,CI> res; assert(0);
Create<N-1>::template cx<CI,CI>::template ccx<ROP,OpF>::template cccx<N>(res,mIn,ind1,ind2); return nullptr;
}
template <class ROP, class OpF, size_t N>
template <class... Inds>
auto HighLevelOp<ROP,OpF,N>::xcreate(const std::shared_ptr<Inds>&... inds)
-> typename B::template RetT<Inds...>
{
typename B::template RetT<Inds...> res;
Create<N-1>::template cx<Inds...>::template ccx<ROP,OpF>::template cccx<N>
(res,mIn,inds...);
return res; return res;
} }
@ -182,11 +186,11 @@ namespace MultiArrayTools
} }
template <class ROP> template <class ROP>
auto HighLevelOpHolder<ROP>::create(const std::shared_ptr<CI> ind1, template <class... Inds>
const std::shared_ptr<CI> ind2) const auto HighLevelOpHolder<ROP>::create(const std::shared_ptr<Inds>&... inds) const
-> decltype(mOp->create(ind1,ind2)) -> decltype(mOp->create(inds...))
{ {
return mOp->create(ind1,ind2); return mOp->create(inds...);
} }
template <class ROP> template <class ROP>

View file

@ -38,8 +38,8 @@ namespace MultiArrayTools
virtual bool root() const = 0; virtual bool root() const = 0;
virtual RetT<CI,CI> create(const std::shared_ptr<CI> ind1, virtual RetT<CI,CI> create(const std::shared_ptr<CI>& ind1,
const std::shared_ptr<CI> ind2) = 0; const std::shared_ptr<CI>& ind2) = 0;
virtual const ROP* get() const = 0; virtual const ROP* get() const = 0;
@ -50,6 +50,9 @@ namespace MultiArrayTools
{ {
private: private:
typedef HighLevelOpBase<ROP> B; typedef HighLevelOpBase<ROP> B;
template <class... Inds>
typename B::template RetT<Inds...> xcreate(const std::shared_ptr<Inds>&... inds);
ROP mOp; ROP mOp;
public: public:
@ -59,8 +62,8 @@ namespace MultiArrayTools
virtual bool root() const override final; virtual bool root() const override final;
virtual typename B::template RetT<CI,CI> virtual typename B::template RetT<CI,CI>
create(const std::shared_ptr<CI> ind1, create(const std::shared_ptr<CI>& ind1,
const std::shared_ptr<CI> ind2) override final; const std::shared_ptr<CI>& ind2) override final { return xcreate(ind1,ind2); }
virtual const ROP* get() const override final; virtual const ROP* get() const override final;
@ -78,12 +81,17 @@ namespace MultiArrayTools
template <class ROP, class OpF, size_t N> template <class ROP, class OpF, size_t N>
class HighLevelOp : public HighLevelOpBase<ROP> class HighLevelOp : public HighLevelOpBase<ROP>
{ {
private:
std::array<std::shared_ptr<HighLevelOpBase<ROP>>,N> mIn;
public: public:
typedef HighLevelOpBase<ROP> B; typedef HighLevelOpBase<ROP> B;
private:
std::array<std::shared_ptr<HighLevelOpBase<ROP>>,N> mIn;
template <class... Inds>
auto xcreate(const std::shared_ptr<Inds>&... inds)
-> typename B::template RetT<Inds...>;
public:
HighLevelOp(std::array<std::shared_ptr<HighLevelOpBase<ROP>>,N> in); HighLevelOp(std::array<std::shared_ptr<HighLevelOpBase<ROP>>,N> in);
virtual bool root() const override final; virtual bool root() const override final;
@ -91,9 +99,9 @@ namespace MultiArrayTools
virtual const ROP* get() const override final; virtual const ROP* get() const override final;
virtual typename B::template RetT<CI,CI> virtual typename B::template RetT<CI,CI>
create(const std::shared_ptr<CI> ind1, create(const std::shared_ptr<CI>& ind1,
const std::shared_ptr<CI> ind2) override final; const std::shared_ptr<CI>& ind2) override final { return xcreate(ind1,ind2); }
}; };
@ -113,10 +121,10 @@ namespace MultiArrayTools
HighLevelOpHolder(const std::shared_ptr<HighLevelOpBase<ROP>>& op); HighLevelOpHolder(const std::shared_ptr<HighLevelOpBase<ROP>>& op);
bool root() const; bool root() const;
auto create(const std::shared_ptr<CI> ind1, template <class... Inds>
const std::shared_ptr<CI> ind2) const auto create(const std::shared_ptr<Inds>&... inds) const
-> decltype(mOp->create(ind1,ind2)); -> decltype(mOp->create(inds...));
auto get() const -> decltype(mOp->get()); auto get() const -> decltype(mOp->get());