12#ifndef __cxz_index_mul_cc_h__
13#define __cxz_index_mul_cc_h__
28 static_assert(
sizeof...(Is) ==
sizeof...(
Indices),
"inconsistent index sequence");
37 static_assert(
sizeof...(Js) ==
sizeof...(
Indices),
"inconsistent index sequence");
47 static_assert(
sizeof...(Is) ==
sizeof...(
Indices1),
"inconsistent index sequence");
48 static_assert(
sizeof...(Js) ==
sizeof...(
Indices2),
"inconsistent index sequence");
58 template <
class I1,
typename Meta1,
class I2,
typename Meta2>
62 if constexpr(std::is_same<I1,YIndex>::value
or std::is_same<I2,YIndex>::value
or
63 std::is_same<I1,DIndex>::value
or std::is_same<I2,DIndex>::value) {
75 return b.lmul(std::make_shared<I1>(a.
THIS()));
82 return a.
rmul(std::make_shared<I2>(
b.THIS()));
85 template <
class Index,
class...
Indices>
93 template <
class Index,
class...
Indices>
107 template <
class I1,
typename Meta1>
110 return b.lmul(std::make_shared<I1>(a.
THIS()));
113 template <
class I2,
typename Meta2>
116 return a.
rmul(std::make_shared<I2>(
b.THIS()));
128 template <
class I1,
class I2>
132 if constexpr(std::is_same<I1,YIndex>::value
or std::is_same<I2,YIndex>::value
or
133 std::is_same<I1,DIndex>::value
or std::is_same<I2,DIndex>::value) {
DPack rmul(const Sptr< DIndex > &i) const
DPack mul(const DPack &p) const
constexpr decltype(auto) rmul(const Sptr< Index > &i) const
constexpr decltype(auto) mul(const SPack< Indices2... > &p) const
DPack dpack(const Indices &... inds)
DPack dpackp(const Sptr< Indices > &... inds)
constexpr decltype(auto) spack(const Indices &... inds)
std::integral_constant< SizeT, N > CSizeT
Sptr< Range > rangeCast(const RangePtr r)
std::index_sequence< Is... > Isq
decltype(auto) iptrMul(const Sptr< I1 > &a, const Sptr< I2 > &b)
constexpr decltype(auto) spackp(const Sptr< Indices > &... inds)
std::shared_ptr< T > Sptr
static decltype(auto) evalMX(const Sptr< GMIndex< BlockT, Indices... > > &a, const Sptr< I > &b, Isq< Is... > is)
static decltype(auto) evalXM(const Sptr< I > &a, const Sptr< GMIndex< BlockT, Indices... > > &b, Isq< Js... > js)
static decltype(auto) evalMM(const Sptr< GMIndex< BlockT1, Indices1... > > &a, const Sptr< GMIndex< BlockT2, Indices2... > > &b, Isq< Is... > is, Isq< Js... > js)