25#include "general_matrix.h"
48 static constexpr bool isVector {
true};
50 using iterator = AT *;
51 using const_iterator =
const AT *;
53 using value_type = AT;
67 const AT* elePtr(
int i)
const {
82 explicit Vector(
int m, Init ini=INIT,
const AT &a=AT()) : Matrix<General,Ref,Ref,AT>(m,1,ini,a) { }
96 template<
class Type,
class Row,
class Col>
97 explicit Vector(
const Matrix<Type,Row,Col,AT> &x) : Matrix<General,Ref,Ref,AT>(x) {
98 FMATVEC_ASSERT(x.cols()==1, AT);
123 FMATVEC_ASSERT(n==1, AT);
131 Vector<Ref,AT>& resize(
int m, Init ini=INIT,
const AT &a=AT()) {
132 Matrix<General,Ref,Ref,AT>::resize(m,1,ini,a);
143 FMATVEC_ASSERT(m == x.
size(), AT);
155 FMATVEC_ASSERT(m == x.size(), AT);
181 FMATVEC_ASSERT(A.
cols() == 1, AT);
198 if(m!=x.size()) resize(x.size(),NONINIT);
203 operator Vector<Ref,AT2>()
const {
204 Vector<Ref,AT2> ret(size());
205 for(
size_t i=0; i<size(); ++i)
220 FMATVEC_ASSERT(i>=0, AT);
221 FMATVEC_ASSERT(i<m, AT);
232 FMATVEC_ASSERT(i>=0, AT);
233 FMATVEC_ASSERT(i<m, AT);
238 iterator begin() {
return &ele[0]; }
239 iterator end() {
return &ele[m]; }
240 const_iterator begin()
const {
return &ele[0]; }
241 const_iterator end()
const {
return &ele[m]; }
242 const_iterator cbegin() const noexcept {
return &ele[0]; }
243 const_iterator cend() const noexcept {
return &ele[m]; }
249 const AT& e(
int i)
const {
260 inline Vector<Ref,AT>& init(
const AT& val=AT());
261 inline Vector<Ref,AT>& init(Init,
const AT& a=AT()) {
return init(a); }
262 inline Vector<Ref,AT>& init(Noinit,
const AT& a=AT()) {
return *
this; }
276 int inc()
const {
return 1;}
291 explicit inline operator std::vector<AT>()
const;
297 explicit inline Vector(
const std::vector<AT> &v);
314 template<
class Row>
inline void set(
const Range<Var,Var> &I,
const Vector<Row,AT> &x);
316 template<
class Row>
inline void add(
const Range<Var,Var> &I,
const Vector<Row,AT> &x);
318 inline const Vector<Ref,AT> operator()(
const Indices &I)
const;
320 template<
class Row>
inline void set(
const Indices &I,
const Vector<Row,AT> &x);
322 inline void ref(Vector<Ref,AT> &x,
const Range<Var,Var> &I);
324 inline void ref(Matrix<General,Ref,Ref,AT> &A,
int j);
326 inline void ref(Matrix<General,Ref,Ref,AT> &A,
const Range<Var,Var> &I,
int j);
328 const RowVector<Ref,AT> T()
const;
333 for(
int i=0; i<m; i++)
341 FMATVEC_ASSERT(I.
end()<m, AT);
345 for(
int i=0; i<x.
size(); i++)
346 x.e(i) = e(I.
start()+i);
353 std::vector<AT> ret(size());
354 for(
int i=0; i<size(); ++i)
361 for(
int i=0; i<size(); ++i)
367 template <
class AT>
template <
class Row>
369 for(
int i=0; i<size(); i++)
374 template <
class AT>
template<
class Row>
375 inline void Vector<Ref,AT>::set(
const Range<Var,Var> &I,
const Vector<Row,AT> &x) {
377 FMATVEC_ASSERT(I.end()<size(), AT);
378 FMATVEC_ASSERT(I.size()==x.size(), AT);
380 for(
int i=I.start(), ii=0; i<=I.end(); i++, ii++)
384 template <
class AT>
template<
class Row>
385 inline void Vector<Ref,AT>::add(
const Range<Var,Var> &I,
const Vector<Row,AT> &x) {
387 FMATVEC_ASSERT(I.end()<size(), AT);
388 FMATVEC_ASSERT(I.size()==x.size(), AT);
390 for(
int i=I.start(), ii=0; i<=I.end(); i++, ii++)
395 inline const Vector<Ref,AT> Vector<Ref,AT>::operator()(
const Indices &I)
const {
396 FMATVEC_ASSERT(I.max()<size(), AT);
398 Vector<Ref,AT> x(I.size(),NONINIT);
400 for(
int i=0; i<x.size(); i++)
406 template <
class AT>
template <
class Row>
407 inline void Vector<Ref,AT>::set(
const Indices &I,
const Vector<Row,AT> &x) {
408 FMATVEC_ASSERT(I.max()<size(), AT);
409 FMATVEC_ASSERT(I.size()==x.size(), AT);
410 for(
int i=0; i<I.size(); i++)
415 inline void Vector<Ref,AT>::ref(Vector<Ref,AT> &x,
const Range<Var,Var> &I) {
417 FMATVEC_ASSERT(I.end()<x.size(), AT);
422 ele = x.elePtr(I.start());
427 inline void Vector<Ref,AT>::ref(Matrix<General,Ref,Ref,AT> &A,
int j) {
429 FMATVEC_ASSERT(j<A.cols(), AT);
439 inline void Vector<Ref,AT>::ref(Matrix<General,Ref,Ref,AT> &A,
const Range<Var,Var> &I,
int j) {
441 FMATVEC_ASSERT(I.end()<A.rows(), AT);
442 FMATVEC_ASSERT(j<A.cols(), AT);
447 ele = A.elePtr(I.start(),j);
452 inline const RowVector<Ref,AT> Vector<Ref,AT>::T()
const {
453 RowVector<Ref,AT> x(m,NONINIT);
454 for(
int i=0; i<m; 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
This is the basic matrix class for arbitrary matrices.
Definition: matrix.h:52
AT & operator()(int i, int j)
Standard constructor.
Definition: matrix.h:84
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: vector.h:39
Vector(const Vector< Ref, AT > &x)
Copy Constructor.
Definition: vector.h:89
Vector(const char *str)
String Constructor.
Definition: vector.h:122
const AT & operator()(int i) const
Element operator.
Definition: vector.h:230
Vector< Ref, AT > & operator&=(Vector< Ref, AT > &x)
Reference operator.
Definition: vector.h:165
int inc() const
Increment.
Definition: vector.h:276
Vector()
Standard constructor.
Definition: vector.h:79
Vector< Ref, AT > & operator=(const Vector< Row, AT > &x)
Assignment operator.
Definition: vector.h:154
AT & operator()(int i)
Element operator.
Definition: vector.h:218
Vector< Ref, AT > & operator&=(Matrix< General, Ref, Ref, AT > &A)
Reference operator.
Definition: vector.h:180
Vector(int m, AT *ele)
Regular Constructor.
Definition: vector.h:107
int size() const
Size.
Definition: vector.h:268
Vector< Ref, AT > & operator=(const Vector< Ref, AT > &x)
Assignment operator.
Definition: vector.h:142
Namespace fmatvec.
Definition: _memory.cc:28