25#include "general_matrix.h"
45 static constexpr bool isVector {
true};
47 using iterator = AT *;
48 using const_iterator =
const AT *;
50 using value_type = AT;
60 const AT* elePtr(
int i)
const {
79 explicit RowVector(
int n, Init ini=INIT,
const AT &a=AT()) : Matrix<General,Ref,Ref,AT>(1,n,ini,a) { }
93 template<
class Type,
class Row,
class Col>
94 explicit RowVector(
const Matrix<Type,Row,Col,AT> &x) : Matrix<General,Ref,Ref,AT>(x) {
95 FMATVEC_ASSERT(x.rows()==1, AT);
120 FMATVEC_ASSERT(m==1, AT);
128 RowVector<Ref,AT>& resize(
int n, Init ini=INIT,
const AT &a=AT()) {
129 Matrix<General,Ref,Ref,AT>::resize(1,n,ini,a);
140 FMATVEC_ASSERT(n == x.
size(), AT);
152 FMATVEC_ASSERT(n == x.size(), AT);
178 FMATVEC_ASSERT(A.
rows() == 1, AT);
195 if(n!=x.size()) resize(x.size(),NONINIT);
200 operator Vector<Ref,AT2>()
const {
201 Vector<Ref,AT2> ret(size());
202 for(
size_t i=0; i<size(); ++i)
216 FMATVEC_ASSERT(i>=0, AT);
217 FMATVEC_ASSERT(i<n, AT);
226 FMATVEC_ASSERT(i>=0, AT);
227 FMATVEC_ASSERT(i<n, AT);
231 iterator begin() { FMATVEC_ASSERT(lda==1, AT);
return &ele[0]; }
232 iterator end() { FMATVEC_ASSERT(lda==1, AT);
return &ele[n*lda]; }
233 const_iterator begin()
const { FMATVEC_ASSERT(lda==1, AT);
return &ele[0]; }
234 const_iterator end()
const { FMATVEC_ASSERT(lda==1, AT);
return &ele[n*lda]; }
235 const_iterator cbegin() const noexcept { FMATVEC_ASSERT(lda==1, AT);
return &ele[0]; }
236 const_iterator cend() const noexcept { FMATVEC_ASSERT(lda==1, AT);
return &ele[n*lda]; }
242 const AT& e(
int i)
const {
253 inline RowVector<Ref,AT>& init(
const AT& val);
254 inline RowVector<Ref,AT>& init(Init,
const AT &a=AT()) {
return init(a); }
255 inline RowVector<Ref,AT>& init(Noinit,
const AT &a=AT()) {
return *
this; }
269 int inc()
const {
return lda;}
281 explicit inline operator std::vector<AT>()
const;
287 explicit inline RowVector(
const std::vector<AT> &v);
325 for(
int i=0; i<n; i++)
333 FMATVEC_ASSERT(I.
end()<n, AT);
336 for(
int i=0; i<x.
size(); i++)
337 x.e(i) = e(I.
start()+i);
344 std::vector<AT> ret(size());
345 for(
int i=0; i<size(); ++i)
352 for(
int i=0; i<size(); ++i)
358 template <
class AT>
template <
class Col>
360 for(
int i=0; i<size(); i++)
365 template <
class AT>
template <
class Row>
366 inline void RowVector<Ref,AT>::set(
const Range<Var,Var> &I,
const RowVector<Row,AT> &x) {
368 FMATVEC_ASSERT(I.end()<size(), AT);
369 FMATVEC_ASSERT(I.size()==x.size(), AT);
371 for(
int i=I.start(), ii=0; i<=I.end(); i++, ii++)
375 template <
class AT>
template <
class Row>
377 inline void RowVector<Ref,AT>::add(
const Range<Var,Var> &I,
const RowVector<Row,AT> &x) {
378 FMATVEC_ASSERT(I.end()<size(), AT);
379 FMATVEC_ASSERT(I.size()==x.size(), AT);
381 for(
int i=I.start(), ii=0; i<=I.end(); i++, ii++)
387 FMATVEC_ASSERT(I.max()<size(), AT);
389 RowVector<Ref,AT> x(I.size(),NONINIT);
391 for(
int i=0; i<x.size(); i++)
397 template <
class AT>
template <
class Row>
398 inline void RowVector<Ref,AT>::set(
const Indices &I,
const RowVector<Row,AT> &x) {
399 FMATVEC_ASSERT(I.max()<size(), AT);
400 FMATVEC_ASSERT(I.size()==x.size(), AT);
401 for(
int i=0; i<I.size(); i++)
406 inline void RowVector<Ref,AT>::ref(RowVector<Ref,AT> &x,
const Range<Var,Var> &I) {
408 FMATVEC_ASSERT(I.end()<x.size(), AT);
413 ele = x.elePtr(I.start());
418 inline void RowVector<Ref,AT>::ref(Matrix<General,Ref,Ref,AT> &A,
int i) {
420 FMATVEC_ASSERT(i<A.rows(), AT);
430 inline void RowVector<Ref,AT>::ref(Matrix<General,Ref,Ref,AT> &A,
int i,
const Range<Var,Var> &J) {
432 FMATVEC_ASSERT(i<A.rows(), AT);
433 FMATVEC_ASSERT(J.end()<A.cols(), AT);
438 ele = A.elePtr(i,J.start());
443 inline const Vector<Ref,AT> RowVector<Ref,AT>::T()
const {
444 Vector<Ref,AT> x(n,NONINIT);
445 for(
int i=0; i<n; i++)
Shape class for general matrices.
Definition: types.h:116
This is a matrix class for general matrices.
Definition: general_matrix.h:42
int cols() const
Number of columns.
Definition: general_matrix.h:313
int rows() const
Number of rows.
Definition: general_matrix.h:307
AT * operator()()
Pointer operator.
Definition: general_matrix.h:295
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 rowvector class of general shape in dense storage format.
Definition: row_vector.h:36
RowVector(const char *str)
String Constructor.
Definition: row_vector.h:119
int size() const
Size.
Definition: row_vector.h:261
RowVector< Ref, AT > & operator=(const RowVector< Ref, AT > &x)
Assignment operator.
Definition: row_vector.h:139
RowVector(int n, AT *ele)
Regular Constructor.
Definition: row_vector.h:104
const AT & operator()(int i) const
Element operator.
Definition: row_vector.h:225
RowVector()
Standard constructor.
Definition: row_vector.h:76
AT & operator()(int i)
Element operator.
Definition: row_vector.h:215
int inc() const
Increment.
Definition: row_vector.h:269
RowVector< Ref, AT > & operator&=(RowVector< Ref, AT > &x)
Reference operator.
Definition: row_vector.h:162
RowVector< Ref, AT > & operator=(const RowVector< Row, AT > &x)
Assignment operator.
Definition: row_vector.h:151
RowVector(const RowVector< Ref, AT > &x)
Copy Constructor.
Definition: row_vector.h:86
RowVector< Ref, AT > & operator&=(Matrix< General, Ref, Ref, AT > &A)
Reference operator.
Definition: row_vector.h:177
This is a vector class of general shape in dense storage format.
Definition: vector.h:39
Namespace fmatvec.
Definition: _memory.cc:28