25 #include "var_general_matrix.h"
39 template <
class AT>
class Vector<
Var,AT> :
public Matrix<General,Var,Fixed<1>,AT> {
45 typedef AT AtomicType;
67 Vector(
int m, Init ini=INIT,
const AT &a=0) : Matrix<General,Var,Fixed<1>,AT>(m,ini,a) { }
98 template<
class Type,
class Row,
class Col>
99 explicit Vector(
const Matrix<Type,Row,Col,AT> &A) : Matrix<General,Var,Fixed<1>,AT>(A) {
102 Vector<Var,AT>& resize() {
103 Matrix<General,Var,Fixed<1>,AT>::resize();
107 Vector<Var,AT>& resize(
int m, Noinit) {
108 Matrix<General,Var,Fixed<1>,AT>::resize(m,Noinit());
112 Vector<Var,AT>& resize(
int m, Init ini=INIT,
const AT &a=0) {
113 Matrix<General,Var,Fixed<1>,AT>::resize(m,ini,a);
123 inline Vector<Var,AT>& operator=(
const Vector<Var,AT> &x);
126 inline Vector<Var,AT>& operator=(
const Vector<Row,AT> &x);
135 inline Vector<Var,AT>& operator<<(const Vector<Row,AT> &x);
149 #ifndef FMATVEC_NO_BOUNDS_CHECK
163 #ifndef FMATVEC_NO_BOUNDS_CHECK
179 const AT&
e(
int i)
const {
192 inline Vector<Var,AT>& init(Noinit,
const AT& a=0) {
return *
this; }
206 int inc()
const {
return 1;};
214 inline operator std::vector<AT>();
220 inline Vector(std::vector<AT> v);
235 for(
int i=0; i<M; i++)
248 #ifndef FMATVEC_NO_SIZE_CHECK
249 assert(M == x.
size());
258 template <
class AT>
template<
class Row>
266 #ifndef FMATVEC_NO_SIZE_CHECK
267 assert(M == x.size());
276 template <
class AT>
template<
class Row>
293 for(
int i=0; i<M; i++)
300 std::vector<AT> ret(size());
301 if(size()>0) memcpy(&ret[0], &
operator()(0),
sizeof(AT)*size());
307 if(size()>0) memcpy(&
operator()(0), &v[0],
sizeof(AT)*size());
312 #ifndef FMATVEC_NO_BOUNDS_CHECK
317 for(
int i=0; i<x.size(); i++)
318 x.e(i) = e(I.
start()+i);
323 template <
class AT>
template <
class Row>
324 inline void Vector<Var,AT>::set(
const Range<Var,Var> &I,
const Vector<Row,AT> &x) {
325 #ifndef FMATVEC_NO_BOUNDS_CHECK
326 assert(I.end()<size());
327 assert(I.size()==x.size());
330 for(
int i=I.start(), ii=0; i<=I.end(); i++, ii++)
334 template <
class AT>
template <
class Row>
335 inline void Vector<Var,AT>::add(
const Range<Var,Var> &I,
const Vector<Row,AT> &x) {
336 #ifndef FMATVEC_NO_BOUNDS_CHECK
337 assert(I.end()<size());
338 assert(I.size()==x.size());
341 for(
int i=I.start(), ii=0; i<=I.end(); i++, ii++)
347 template <
class AT>
template <
class Row>
348 inline void Vector<Var,AT>::deepCopy(
const Vector<Row,AT> &x) {
349 for(
int i=0; i<M; i++)
Vector()
Standard constructor.
Definition: var_vector.h:61
This is the basic matrix class for arbitrary matrices.
Definition: fmatvec.h:41
This is a vector class of general shape in dense storage format.
Definition: var_vector.h:39
Vector(const char *str)
String Constructor.
Definition: var_vector.h:81
const AT & operator()(int i) const
Element operator.
Definition: var_vector.h:161
int inc() const
Increment.
Definition: var_vector.h:206
const AT & e(int i) const
Element operator.
Definition: var_vector.h:179
Basic shape class for matrices.
Definition: types.h:100
int size() const
Size.
Definition: var_vector.h:198
Vector(const Vector< Var, AT > &x)
Copy Constructor.
Definition: var_vector.h:91
int end() const
Last element.
Definition: range.h:95
AT & operator()(int i)
Element operator.
Definition: var_vector.h:147
This is an index class for creating submatrices.
Definition: range.h:44
This is a vector class of general shape in dense storage format.
Definition: var_row_vector.h:39
int start() const
First element.
Definition: range.h:89