22 #ifndef var_row_vector_h
23 #define var_row_vector_h
25 #include "var_general_matrix.h"
45 typedef AT AtomicType;
68 RowVector(
int n, Init ini=INIT,
const AT &a=0) : Matrix<General,Fixed<1>,Var,AT>(n,ini,a) { }
99 template<
class Type,
class Row,
class Col>
100 explicit RowVector(
const Matrix<Type,Row,Col,AT> &A) : Matrix<General,Fixed<1>,Var,AT>(A) {
103 RowVector<Var,AT>& resize() {
104 Matrix<General,Fixed<1>,Var,AT>::resize();
108 RowVector<Var,AT>& resize(
int n, Noinit) {
109 Matrix<General,Fixed<1>,Var,AT>::resize(n,Noinit());
113 RowVector<Var,AT>& resize(
int n, Init ini=INIT,
const AT &a=0) {
114 Matrix<General,Fixed<1>,Var,AT>::resize(n,ini,a);
124 inline RowVector<Var,AT>& operator=(
const RowVector<Var,AT> &x);
127 inline RowVector<Var,AT>& operator=(
const RowVector<Row,AT> &x);
136 inline RowVector<Var,AT>& operator<<(const RowVector<Row,AT> &x);
150 #ifndef FMATVEC_NO_BOUNDS_CHECK
164 #ifndef FMATVEC_NO_BOUNDS_CHECK
180 const AT&
e(
int i)
const {
193 inline RowVector<Var,AT>& init(Noinit,
const AT &a=0) {
return *
this; }
207 int inc()
const {
return 1;};
215 inline operator std::vector<AT>();
236 for(
int i=0; i<N; i++)
249 #ifndef FMATVEC_NO_SIZE_CHECK
250 assert(N == x.
size());
259 template <
class AT>
template<
class Row>
267 #ifndef FMATVEC_NO_SIZE_CHECK
268 assert(N == x.size());
277 template <
class AT>
template<
class Row>
294 for(
int i=0; i<N; i++)
301 std::vector<AT> ret(size());
302 if(size()>0) memcpy(&ret[0], &
operator()(0),
sizeof(AT)*size());
308 if(size()>0) memcpy(&
operator()(0), &v[0],
sizeof(AT)*size());
313 #ifndef FMATVEC_NO_BOUNDS_CHECK
318 for(
int i=0; i<x.size(); i++)
319 x.e(i) = e(I.
start()+i);
324 template <
class AT>
template <
class Row>
325 inline void RowVector<Var,AT>::set(
const Range<Var,Var> &I,
const RowVector<Row,AT> &x) {
326 #ifndef FMATVEC_NO_BOUNDS_CHECK
327 assert(I.end()<size());
328 assert(I.size()==x.size());
331 for(
int i=I.start(), ii=0; i<=I.end(); i++, ii++)
335 template <
class AT>
template <
class Row>
336 inline void RowVector<Var,AT>::add(
const Range<Var,Var> &I,
const RowVector<Row,AT> &x) {
337 #ifndef FMATVEC_NO_BOUNDS_CHECK
338 assert(I.end()<size());
339 assert(I.size()==x.size());
342 for(
int i=I.start(), ii=0; i<=I.end(); i++, ii++)
348 template <
class AT>
template <
class Row>
349 inline void RowVector<Var,AT>::deepCopy(
const RowVector<Row,AT> &x) {
350 for(
int i=0; i<N; i++)
const AT & operator()(int i) const
Element operator.
Definition: var_row_vector.h:162
RowVector(const char *str)
String Constructor.
Definition: var_row_vector.h:82
This is the basic matrix class for arbitrary matrices.
Definition: fmatvec.h:41
RowVector()
Standard constructor.
Definition: var_row_vector.h:61
This is a vector class of general shape in dense storage format.
Definition: var_vector.h:39
AT & operator()(int i)
Element operator.
Definition: var_row_vector.h:148
RowVector(const RowVector< Var, AT > &x)
Copy Constructor.
Definition: var_row_vector.h:92
int size() const
Size.
Definition: var_row_vector.h:199
Basic shape class for matrices.
Definition: types.h:100
const AT & e(int i) const
Element operator.
Definition: var_row_vector.h:180
int end() const
Last element.
Definition: range.h:95
int inc() const
Increment.
Definition: var_row_vector.h:207
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