minor changes
This commit is contained in:
parent
59e4f4ecfd
commit
e3afa8b8c1
2 changed files with 42 additions and 30 deletions
|
@ -59,12 +59,12 @@ namespace MultiArrayTools
|
|||
}
|
||||
|
||||
template <class ROP>
|
||||
auto HighLevelOpRoot<ROP>::create(const std::shared_ptr<CI> ind1,
|
||||
const std::shared_ptr<CI> ind2)
|
||||
-> typename B::template RetT<CI,CI>
|
||||
template <class... Inds>
|
||||
auto HighLevelOpRoot<ROP>::xcreate(const std::shared_ptr<Inds>&... inds)
|
||||
-> typename B::template RetT<Inds...>
|
||||
{
|
||||
assert(0);
|
||||
return typename B::template RetT<CI,CI>();
|
||||
return typename B::template RetT<Inds...>();
|
||||
}
|
||||
|
||||
template <class ROP>
|
||||
|
@ -160,15 +160,19 @@ namespace MultiArrayTools
|
|||
|
||||
template <class ROP, class OpF, size_t N>
|
||||
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;
|
||||
Create<N-1>::template cx<CI,CI>::template ccx<ROP,OpF>::template cccx<N>(res,mIn,ind1,ind2);
|
||||
assert(0);
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -182,11 +186,11 @@ namespace MultiArrayTools
|
|||
}
|
||||
|
||||
template <class ROP>
|
||||
auto HighLevelOpHolder<ROP>::create(const std::shared_ptr<CI> ind1,
|
||||
const std::shared_ptr<CI> ind2) const
|
||||
-> decltype(mOp->create(ind1,ind2))
|
||||
template <class... Inds>
|
||||
auto HighLevelOpHolder<ROP>::create(const std::shared_ptr<Inds>&... inds) const
|
||||
-> decltype(mOp->create(inds...))
|
||||
{
|
||||
return mOp->create(ind1,ind2);
|
||||
return mOp->create(inds...);
|
||||
}
|
||||
|
||||
template <class ROP>
|
||||
|
|
|
@ -38,8 +38,8 @@ namespace MultiArrayTools
|
|||
|
||||
virtual bool root() const = 0;
|
||||
|
||||
virtual RetT<CI,CI> create(const std::shared_ptr<CI> ind1,
|
||||
const std::shared_ptr<CI> ind2) = 0;
|
||||
virtual RetT<CI,CI> create(const std::shared_ptr<CI>& ind1,
|
||||
const std::shared_ptr<CI>& ind2) = 0;
|
||||
|
||||
virtual const ROP* get() const = 0;
|
||||
|
||||
|
@ -50,6 +50,9 @@ namespace MultiArrayTools
|
|||
{
|
||||
private:
|
||||
typedef HighLevelOpBase<ROP> B;
|
||||
|
||||
template <class... Inds>
|
||||
typename B::template RetT<Inds...> xcreate(const std::shared_ptr<Inds>&... inds);
|
||||
|
||||
ROP mOp;
|
||||
public:
|
||||
|
@ -59,8 +62,8 @@ namespace MultiArrayTools
|
|||
virtual bool root() const override final;
|
||||
|
||||
virtual typename B::template RetT<CI,CI>
|
||||
create(const std::shared_ptr<CI> ind1,
|
||||
const std::shared_ptr<CI> ind2) override final;
|
||||
create(const std::shared_ptr<CI>& ind1,
|
||||
const std::shared_ptr<CI>& ind2) override final { return xcreate(ind1,ind2); }
|
||||
|
||||
virtual const ROP* get() const override final;
|
||||
|
||||
|
@ -78,12 +81,17 @@ namespace MultiArrayTools
|
|||
template <class ROP, class OpF, size_t N>
|
||||
class HighLevelOp : public HighLevelOpBase<ROP>
|
||||
{
|
||||
private:
|
||||
std::array<std::shared_ptr<HighLevelOpBase<ROP>>,N> mIn;
|
||||
|
||||
public:
|
||||
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);
|
||||
|
||||
virtual bool root() const override final;
|
||||
|
@ -91,9 +99,9 @@ namespace MultiArrayTools
|
|||
virtual const ROP* get() const override final;
|
||||
|
||||
virtual typename B::template RetT<CI,CI>
|
||||
create(const std::shared_ptr<CI> ind1,
|
||||
const std::shared_ptr<CI> ind2) override final;
|
||||
|
||||
create(const std::shared_ptr<CI>& ind1,
|
||||
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);
|
||||
|
||||
bool root() const;
|
||||
|
||||
auto create(const std::shared_ptr<CI> ind1,
|
||||
const std::shared_ptr<CI> ind2) const
|
||||
-> decltype(mOp->create(ind1,ind2));
|
||||
|
||||
template <class... Inds>
|
||||
auto create(const std::shared_ptr<Inds>&... inds) const
|
||||
-> decltype(mOp->create(inds...));
|
||||
|
||||
auto get() const -> decltype(mOp->get());
|
||||
|
||||
|
|
Loading…
Reference in a new issue