add missing operator* for GMIndex + fix various bugs
This commit is contained in:
parent
4642ebe6d2
commit
026c7f1a87
3 changed files with 15 additions and 2 deletions
|
@ -214,7 +214,7 @@ namespace CNORXZ
|
|||
|
||||
template <class F, class... Ops>
|
||||
struct op_size<Operation<F,Ops...>>
|
||||
{ static constexpr SizeT value = sizeof...(Ops); };
|
||||
{ static constexpr SizeT value = ( op_size<Ops>::value + ... ); };
|
||||
|
||||
template <class CXpr>
|
||||
class Contraction : public OpInterface<Contraction<CXpr>>
|
||||
|
@ -238,6 +238,10 @@ namespace CNORXZ
|
|||
CXpr mCXpr;
|
||||
};
|
||||
|
||||
template <class CXpr>
|
||||
struct op_size<Contraction<CXpr>>
|
||||
{ static constexpr SizeT value = op_size<CXpr>::value; };
|
||||
|
||||
template <class F, class Op, class IndexT>
|
||||
constexpr decltype(auto) contraction(F&& f, Op&& op, const Sptr<IndexT>& i);
|
||||
|
||||
|
|
|
@ -254,7 +254,7 @@ namespace CNORXZ
|
|||
}
|
||||
if constexpr(not std::is_same<FormatT,None>::value){ mLex = lexpos; }
|
||||
IB::mPos = iter<0,NI>( [&](auto i) {
|
||||
*mIPack[i] = (lex() / lexFormat()[i].val()) % mIPack[i]->lmax().val();
|
||||
*mIPack[i] = (lexpos / lexFormat()[i].val()) % mIPack[i]->lmax().val();
|
||||
return format()[i].val() * mIPack[i]->pos();
|
||||
}, [](const auto&... e) { return (e + ...); } );
|
||||
return *this;
|
||||
|
@ -510,6 +510,12 @@ namespace CNORXZ
|
|||
return std::make_shared<GMIndex<FormatT,Indices...>>(bs, is...);
|
||||
}
|
||||
|
||||
template <class I1, class FormatT, class... Indices>
|
||||
decltype(auto) operator*(const Sptr<GMIndex<FormatT,Indices...>>& a, const Sptr<I1>& b)
|
||||
{
|
||||
return iptrMul(a, b);
|
||||
}
|
||||
|
||||
/*********************
|
||||
* MRangeFactory *
|
||||
*********************/
|
||||
|
|
|
@ -148,6 +148,9 @@ namespace CNORXZ
|
|||
template <class FormatT, class... Indices>
|
||||
constexpr decltype(auto) gmindexPtr(const FormatT& bs, const Sptr<Indices>&... is);
|
||||
|
||||
template <class I1, class FormatT, class... Indices>
|
||||
decltype(auto) operator*(const Sptr<GMIndex<FormatT,Indices...>>& a, const Sptr<I1>& b);
|
||||
|
||||
template <class... Ranges>
|
||||
class MRangeFactory : public RangeFactoryBase
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue