22#ifndef var_row_vector_h
23#define var_row_vector_h
25#include "var_general_matrix.h"
45 static constexpr bool isVector {
true};
47 using iterator = AT *;
48 using const_iterator =
const AT *;
50 using value_type = AT;
71 RowVector<Var,AT>& operator=(RowVector<Var,AT> &&src)
noexcept {
72 FMATVEC_ASSERT(N == src.size(), AT);
79 RowVector(Transpose, Vector<Var, AT> &&src) : Matrix<General,Fixed<1>,Var,AT>() {
89 explicit RowVector(
int n, Noinit ini) : Matrix<General,Fixed<1>,Var,AT>(n,ini) { }
90 explicit RowVector(
int n, Init ini=INIT,
const AT &a=AT()) : Matrix<General,Fixed<1>,Var,AT>(n,ini,a) { }
114 template<
class Type,
class Row,
class Col>
138 RowVector<Var,AT>& resize(
int n, Init ini=INIT,
const AT &a=AT()) {
139 Matrix<General,Fixed<1>,Var,AT>::resize(n,ini,a);
150 FMATVEC_ASSERT(N == x.
size(), AT);
162 FMATVEC_ASSERT(N == x.size(), AT);
174 if(N!=x.size()) resize(x.size(),NONINIT);
178 inline RowVector<Var,AT>& operator<<=(RowVector<Var,AT> &&src) {
197 FMATVEC_ASSERT(i>=0, AT);
198 FMATVEC_ASSERT(i<N, AT);
209 FMATVEC_ASSERT(i>=0, AT);
210 FMATVEC_ASSERT(i<N, AT);
215 iterator begin() {
return &ele[0]; }
216 iterator end() {
return &ele[N]; }
217 const_iterator begin()
const {
return &ele[0]; }
218 const_iterator end()
const {
return &ele[N]; }
219 const_iterator cbegin() const noexcept {
return &ele[0]; }
220 const_iterator cend() const noexcept {
return &ele[N]; }
230 const AT&
e(
int i)
const {
243 inline RowVector<Var,AT>& init(Noinit,
const AT &a=AT()) {
return *
this; }
249 constexpr int size()
const {
return N;}
257 int inc()
const {
return 1;}
265 explicit inline operator std::vector<AT>()
const;
271 explicit inline RowVector(
const std::vector<AT> &v);
288#if defined(SWIG) && SWIG_VERSION < 0x040000
313 for(
int i=0; i<N; i++)
319#if defined(SWIG) && SWIG_VERSION < 0x040000
325 for(
int i=0; i<N; i++)
330#if defined(SWIG) && SWIG_VERSION < 0x040000
331 inline Vector<Var,AT> RowVector<Var,AT>::T() {
333 inline Vector<Var,AT> RowVector<Var,AT>::T() & {
335 Vector<Var,AT> x(N,NONINIT);
336 for(
int i=0; i<N; i++)
343 inline Vector<Var,AT> RowVector<Var,AT>::T() && {
344 return Vector<Var,AT>(Transpose(), std::move(*
this));
350 std::vector<AT> ret(size());
351 for(
int i=0; i<size(); ++i)
358 for(
int i=0; i<size(); ++i)
364 FMATVEC_ASSERT(I.
end()<N, AT);
367 for(
int i=0; i<x.size(); i++)
368 x.e(i) = e(I.
start()+i);
373 template <
class AT>
template <
class Row>
374 inline void RowVector<Var,AT>::set(
const Range<Var,Var> &I,
const RowVector<Row,AT> &x) {
375 FMATVEC_ASSERT(I.end()<size(), AT);
376 FMATVEC_ASSERT(I.size()==x.size(), AT);
378 for(
int i=I.start(), ii=0; i<=I.end(); i++, ii++)
382 template <
class AT>
template <
class Row>
383 inline void RowVector<Var,AT>::add(
const Range<Var,Var> &I,
const RowVector<Row,AT> &x) {
384 FMATVEC_ASSERT(I.end()<size(), AT);
385 FMATVEC_ASSERT(I.size()==x.size(), AT);
387 for(
int i=I.start(), ii=0; i<=I.end(); i++, ii++)
393 FMATVEC_ASSERT(I.max()<size(), AT);
395 RowVector<Var,AT> x(I.size(),NONINIT);
397 for(
int i=0; i<x.size(); i++)
403 template <
class AT>
template <
class Row>
404 inline void RowVector<Var,AT>::set(
const Indices &I,
const RowVector<Row,AT> &x) {
405 FMATVEC_ASSERT(I.max()<size(), AT);
406 FMATVEC_ASSERT(I.size()==x.size(), AT);
407 for(
int i=0; i<I.size(); i++)
414 template <
class AT>
template <
class Row>
415 inline RowVector<Var,AT>& RowVector<Var,AT>::copy(
const RowVector<Row,AT> &x) {
416 for(
int i=0; i<N; i++)
Shape class for general matrices.
Definition: types.h:116
This is the basic matrix class for arbitrary matrices.
Definition: matrix.h:52
This is an index class for creating submatrices.
Definition: range.h:44
int end() const
Last element.
Definition: range.h:91
int size() const
Size.
Definition: range.h:97
int start() const
First element.
Definition: range.h:85
This is a vector class of general shape in dense storage format.
Definition: var_row_vector.h:39
RowVector()
Standard constructor.
Definition: var_row_vector.h:66
constexpr int size() const
Size.
Definition: var_row_vector.h:249
RowVector(const RowVector< Row, AT > &A)
Copy Constructor.
Definition: var_row_vector.h:106
int inc() const
Increment.
Definition: var_row_vector.h:257
RowVector(const Matrix< Type, Row, Col, AT > &A)
Copy Constructor.
Definition: var_row_vector.h:115
AT & operator()(int i)
Element operator.
Definition: var_row_vector.h:195
const AT & operator()(int i) const
Element operator.
Definition: var_row_vector.h:207
const AT & e(int i) const
Element operator.
Definition: var_row_vector.h:230
RowVector(const char *str)
String Constructor.
Definition: var_row_vector.h:130
RowVector< Var, AT > & operator=(const RowVector< Var, AT > &x)
Assignment operator.
Definition: var_row_vector.h:149
RowVector(const RowVector< Var, AT > &x)
Copy Constructor.
Definition: var_row_vector.h:97
This is a vector class of general shape in dense storage format.
Definition: var_vector.h:39
Namespace fmatvec.
Definition: _memory.cc:28