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
this header is dependency free
std::ostream & operator<<(std::ostream &os, const vr_device_info &di)
stream out operator for device infos