25#include "var_general_matrix.h"
39 template <
class AT>
class Vector<
Var,AT> :
public Matrix<General,Var,Fixed<1>,AT> {
45 static constexpr bool isVector {
true};
47 using iterator = AT *;
48 using const_iterator =
const AT *;
50 using value_type = AT;
70 Vector<Var,AT>& operator=(Vector<Var,AT> &&src)
noexcept {
71 FMATVEC_ASSERT(M == src.size(), AT);
78 Vector(Transpose, RowVector<Var, AT> &&src) : Matrix<General,Var,Fixed<1>,AT>() {
88 explicit Vector(
int m, Noinit ini) : Matrix<General,Var,Fixed<1>,AT>(m,ini) { }
89 explicit Vector(
int m, Init ini=INIT,
const AT &a=AT()) : Matrix<General,Var,Fixed<1>,AT>(m,ini,a) { }
113 template<
class Type,
class Row,
class Col>
137 Vector<Var,AT>& resize(
int m, Init ini=INIT,
const AT &a=AT()) {
138 Matrix<General,Var,Fixed<1>,AT>::resize(m,ini,a);
149 FMATVEC_ASSERT(M == x.
size(), AT);
161 FMATVEC_ASSERT(M == x.size(), AT);
173 if(M!=x.size()) resize(x.size(),NONINIT);
177 inline Vector<Var,AT>& operator<<=(Vector<Var,AT> &&src) {
187 operator Vector<Var,AT2>()
const {
188 Vector<Var,AT2> ret(size());
189 for(
size_t i=0; i<size(); ++i)
204 FMATVEC_ASSERT(i>=0, AT);
205 FMATVEC_ASSERT(i<M, AT);
216 FMATVEC_ASSERT(i>=0, AT);
217 FMATVEC_ASSERT(i<M, AT);
222 iterator begin() {
return &ele[0]; }
223 iterator end() {
return &ele[M]; }
224 const_iterator begin()
const {
return &ele[0]; }
225 const_iterator end()
const {
return &ele[M]; }
226 const_iterator cbegin() const noexcept {
return &ele[0]; }
227 const_iterator cend() const noexcept {
return &ele[M]; }
237 const AT&
e(
int i)
const {
250 inline Vector<Var,AT>& init(Noinit,
const AT& a=AT()) {
return *
this; }
256 constexpr int size()
const {
return M;}
264 int inc()
const {
return 1;}
272 explicit inline operator std::vector<AT>()
const;
278 explicit inline Vector(
const std::vector<AT> &v);
295#if defined(SWIG) && SWIG_VERSION < 0x040000
320 for(
int i=0; i<M; i++)
326#if defined(SWIG) && SWIG_VERSION < 0x040000
332 for(
int i=0; i<M; i++)
337#if defined(SWIG) && SWIG_VERSION < 0x040000
338 inline RowVector<Var,AT> Vector<Var,AT>::T() {
340 inline RowVector<Var,AT> Vector<Var,AT>::T() & {
342 RowVector<Var,AT> x(M,NONINIT);
343 for(
int i=0; i<M; i++)
350 inline RowVector<Var,AT> Vector<Var,AT>::T() && {
351 return RowVector<Var,AT>(Transpose(), std::move(*
this));
357 std::vector<AT> ret(size());
358 for(
int i=0; i<size(); ++i)
365 for(
int i=0; i<size(); ++i)
371 FMATVEC_ASSERT(I.
end()<M, AT);
374 for(
int i=0; i<x.size(); i++)
375 x.e(i) = e(I.
start()+i);
380 template <
class AT>
template <
class Row>
381 inline void Vector<Var,AT>::set(
const Range<Var,Var> &I,
const Vector<Row,AT> &x) {
382 FMATVEC_ASSERT(I.end()<size(), AT);
383 FMATVEC_ASSERT(I.size()==x.size(), AT);
385 for(
int i=I.start(), ii=0; i<=I.end(); i++, ii++)
389 template <
class AT>
template <
class Row>
390 inline void Vector<Var,AT>::add(
const Range<Var,Var> &I,
const Vector<Row,AT> &x) {
391 FMATVEC_ASSERT(I.end()<size(), AT);
392 FMATVEC_ASSERT(I.size()==x.size(), AT);
394 for(
int i=I.start(), ii=0; i<=I.end(); i++, ii++)
400 FMATVEC_ASSERT(I.max()<size(), AT);
402 Vector<Var,AT> x(I.size(),NONINIT);
404 for(
int i=0; i<x.size(); i++)
410 template <
class AT>
template <
class Row>
411 inline void Vector<Var,AT>::set(
const Indices &I,
const Vector<Row,AT> &x) {
412 FMATVEC_ASSERT(I.max()<size(), AT);
413 FMATVEC_ASSERT(I.size()==x.size(), AT);
414 for(
int i=0; i<I.size(); i++)
420 template <
class AT>
template <
class Row>
421 inline Vector<Var,AT>& Vector<Var,AT>::copy(
const Vector<Row,AT> &x) {
422 for(
int i=0; i<M; 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
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:129
const AT & operator()(int i) const
Element operator.
Definition: var_vector.h:214
int inc() const
Increment.
Definition: var_vector.h:264
Vector(const Vector< Var, AT > &x)
Copy Constructor.
Definition: var_vector.h:96
Vector< Var, AT > & operator=(const Vector< Var, AT > &x)
Assignment operator.
Definition: var_vector.h:148
Vector()
Standard constructor.
Definition: var_vector.h:66
constexpr int size() const
Size.
Definition: var_vector.h:256
AT & operator()(int i)
Element operator.
Definition: var_vector.h:202
const AT & e(int i) const
Element operator.
Definition: var_vector.h:237
Vector(const Vector< Row, AT > &A)
Copy Constructor.
Definition: var_vector.h:105
Vector(const Matrix< Type, Row, Col, AT > &A)
Copy Constructor.
Definition: var_vector.h:114
Namespace fmatvec.
Definition: _memory.cc:28