45#ifndef LASS_GUARDIAN_OF_INCLUSION_NUM_IMPL_MATRIX_VECTOR_EXPRESSIONS_H
46#define LASS_GUARDIAN_OF_INCLUSION_NUM_IMPL_MATRIX_VECTOR_EXPRESSIONS_H
57template <
typename T,
typename VectorOperand1>
61 enum { lvalue = VectorOperand1::lvalue };
62 typedef typename util::CallTraits<T>::TValue TValue;
63 typedef typename util::CallTraits<T>::TReference TReference;
65 MVColumn(VectorOperand1& iA): operand1_(iA) {}
66 TValue operator()(TSize iI, TSize )
const {
return operand1_[iI]; }
67 TReference operator()(TSize iI, TSize ) {
return operand1_[iI]; }
68 TSize rows()
const {
return operand1_.size(); }\
69 TSize columns()
const {
return 1; }\
71 void resize(TSize iRows, TSize iCols)
73 LASS_ENFORCE(iCols == 1);
74 operand1_.resize(iRows);
77 VectorOperand1& operand1_;
82template <
typename T,
typename VectorOperand1>
86 enum { lvalue =
false };
87 typedef typename util::CallTraits<T>::TValue TValue;
89 MVDiag(
const VectorOperand1& iA): operand1_(iA) {}
90 TValue operator()(TSize iI, TSize iJ)
const
92 return iI == iJ ? operand1_[iI] : NumTraits<T>::zero;
94 TSize rows()
const {
return operand1_.size(); }\
95 TSize columns()
const {
return operand1_.size(); }\
97 typename VectorExpressionTraits<VectorOperand1>::TStorage operand1_;
102template <
typename T,
typename MatrixOperand1,
typename VectorOperand2>
106 enum { lvalue =
false };
107 typedef typename util::CallTraits<T>::TValue TValue;
108 typedef size_t TSize;
109 MVRightProd(
const MatrixOperand1& iA,
const VectorOperand2& iB):
110operand1_(iA), operand2_(iB)
112 LASS_ASSERT(iA.columns() == iB.size());
114 TValue operator[](TSize iIndex)
const
116 const TSize n = operand1_.columns();
117 TValue result = NumTraits<T>::zero;
118 for (TSize k = 0; k < n; ++k)
120 result += operand1_(iIndex, k) * operand2_[k];
124 TSize size()
const {
return operand1_.rows(); }
126 typename MatrixExpressionTraits<MatrixOperand1>::TStorage operand1_;
127 typename VectorExpressionTraits<VectorOperand2>::TStorage operand2_;
numeric types and traits.
Library for Assembled Shared Sources.