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>
|
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>
|
||||||
|
|
|
@ -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());
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue