41 memcpy(_data,m._data,size()*
sizeof(T));
57 void resize(
unsigned n)
67 for(
unsigned i =0; i < _dim;i++)
69 for(
unsigned j = 0; j < _dim;j++)
74 m(i,j)=operator()(i,j);
91 operator const mat<T>()
const
94 for(
unsigned i =0; i < _dim;i++)
96 for(
unsigned j = 0; j < _dim;j++)
101 m(i,j)=operator()(i,j);
110 unsigned size()
const
122 unsigned nrows()
const
127 unsigned ncols()
const
133 void fill(
const T& c)
135 for(
unsigned i=0;i < size(); i++)
142 T& operator() (
const unsigned i,
const unsigned j)
144 assert( i >= j && i < _dim);
145 return _data[i*(i+1)/2+j];
149 const T& operator() (
unsigned i,
unsigned j)
const
151 assert( i >= j && i < _dim);
152 return _data[i*(i+1)/2+j];
156 bool valid_ind(
int i,
int j)
const
158 return ( i >= j && i < (
int)_dim && i >= 0 && j >= 0);
161 template <
typename S>
162 const mat<T> operator*(
const mat<S>& m2)
164 assert(m2.nrows() == nrows());
165 unsigned M = m2.ncols();
166 mat<T> r(nrows(),M,(T)0);
167 for(
unsigned i = 0; i < nrows(); i++)
168 for(
unsigned j = 0; j < M;j++)
169 for(
unsigned k = 0; k <= i; k++)
170 r(i,j) += operator()(i,k) * (T)(m2(k,j));
180std::ostream&
operator<<(std::ostream& out,
const low_tri_mat<T>& m)
183 for(
unsigned i =0;i < m.nrows() ;++i)
196template <
typename T,
typename S>
197const mat<T> operator*(
const low_tri_mat<T>& m1,
const low_tri_mat<S>& m2)
199 assert(m2.nrows() == m1.nrows());
200 unsigned M = m2.ncols();
201 mat<T> r(m1.nrows(),M,(T)0);
202 for(
unsigned i = 0; i < m1.nrows(); i++)
203 for(
unsigned j = 0; j <= i;j++)
204 for(
unsigned k = j; k <= i; k++)
205 r(i,j) += m1(i,k) * (T)(m2(k,j));
212template <
typename T,
typename S>
213const vec<T> operator*(
const low_tri_mat<T>& m1,
const vec<S>& v)
215 assert(m1.ncols() == v.size());
216 unsigned M = v.size();
218 for(
unsigned i = 0; i < m1.nrows(); i++)
219 for(
unsigned k = 0; k <= i; k++)
220 r(i) += m1(i,k) * (T)(v(k));
225template <
typename T,
typename S>
226const mat<T> operator*(
const mat<S>& m1,
const low_tri_mat<T>& m2)
228 assert(m1.ncols() == m2.dim());
229 unsigned M = m2.dim();
230 mat<T> r(m1.nrows(),M,0);
231 for(
unsigned i = 0; i < m1.nrows(); i++)
232 for(
unsigned j = 0; j < M;j++)
233 for(
unsigned k = j; k < m1.ncols(); k++)
234 r(i,j) += m1(i,k) * (T)(m2(k,j));
242mat<T> operator*(
const perm_mat& p,
const low_tri_mat<T>& m)
250mat<T> operator*(
const low_tri_mat<T>& m,
const perm_mat& p)
low_tri_mat< T > & operator=(const low_tri_mat< T > &m)
assignment of a matrix with the same element type
A matrix type (full column major storage) The matrix can be loaded directly into OpenGL without need ...
void resize(unsigned dim)
resize the vector
unsigned size() const
number of elements
std::ostream & operator<<(std::ostream &os, const vr_device_info &di)
stream out operator for device infos