#include <yat/utility/VectorView.h>
Public Types | |
typedef double & | reference |
typedef StrideIterator< double * > | iterator |
mutable iterator | |
typedef double | value_type |
typedef const double & | const_reference |
typedef StrideIterator< const double * > | const_iterator |
VectorBase::const_iterator. | |
Public Member Functions | |
VectorView (void) | |
Default constructor. | |
VectorView (VectorView &other) | |
The copy constructor. | |
VectorView (VectorMutable &other) | |
copy another VectorMutable | |
VectorView (VectorMutable &v, size_t offset, size_t n, size_t stride=1) | |
VectorView constructor. | |
VectorView (Matrix &m, size_t i, bool row=true) | |
~VectorView (void) | |
bool | isview (void) const |
const VectorView & | operator= (const VectorView &) |
The assignment operator. | |
const VectorView & | operator= (const VectorBase &) |
The assignment operator. | |
VectorView (proxy p) | |
create VectorView from proxy class | |
operator proxy () | |
void | all (double value) |
iterator | begin (void) |
const_iterator | begin (void) const |
void | div (const VectorBase &other) |
This function performs element-wise division, . | |
iterator | end (void) |
const_iterator | end (void) const |
gsl_vector * | gsl_vector_p (void) |
const gsl_vector * | gsl_vector_p (void) const |
void | mul (const VectorBase &other) |
This function performs element-wise multiplication, . | |
void | reverse (void) |
Reverse the order of elements in the VectorMutable. | |
void | swap (size_t i, size_t j) |
Exchange elements i and j. | |
double & | operator() (size_t i) |
Element access operator. | |
const double & | operator() (size_t i) const |
Element access operator. | |
const VectorMutable & | operator+= (const VectorBase &) |
Addition and assign operator. VectorBase addition, . | |
const VectorMutable & | operator+= (double d) |
Add a constant to a VectorBase, . | |
const VectorMutable & | operator-= (const VectorBase &) |
Subtract and assign operator. VectorBase subtraction, . | |
const VectorMutable & | operator-= (double d) |
Subtract a constant to a VectorBase, . | |
const VectorMutable & | operator*= (double d) |
Multiply with scalar and assign operator, . | |
bool | equal (const VectorBase &, const double precision=0) const |
Check whether VectorBases are equal within a user defined precision, set by precision. | |
size_t | size (void) const |
bool | operator== (const VectorBase &) const |
Comparison operator. Takes linear time. | |
bool | operator!= (const VectorBase &) const |
Comparison operator. Takes linear time. | |
double | operator* (const VectorBase &) const |
Protected Attributes | |
gsl_vector * | vec_ |
const gsl_vector * | const_vec_ |
pointer to underlying GSL vector | |
Classes | |
struct | proxy |
This class can be used to create a vector view into a Matrix or a VectorMutable. Modifying a view will also modify the underlying data, i.e., the Matrix or VectorMutable that is viewed into. For that reason all constructors are taking non-const references to disallow mutable views into a const objects.
The fact that there is no copy constructor with const argument, but only a so-called move constructor (copying a non-const reference), implies that temporary objects such as objects returned from functions can not be copied directly. Instead the copying is done via a proxy class. Also since we can not bind a temporary to a non-const reference, a VectorView returned from a function cannot be sent directly to a function. For example
Matrix m(10,10); sum(m.row_view(0));
Matrix m(10,10); VectorView vv = m.row_view(0); sum(vv);
Matrix m(10,10); sum(m.row_const_view(0));
Note that VectorView does not own underlying data, and a VectorView is not valid if Vector/Matrix owning the data is deallocated.
typedef double& theplu::yat::utility::VectorMutable::reference [inherited] |
typedef double theplu::yat::utility::VectorBase::value_type [inherited] |
typedef const double& theplu::yat::utility::VectorBase::const_reference [inherited] |
theplu::yat::utility::VectorView::VectorView | ( | void | ) |
Default constructor.
Creates a view into nothing and behaves like an empty Vector.
theplu::yat::utility::VectorView::VectorView | ( | VectorView & | other | ) |
The copy constructor.
Modifications to created VectorView will also modify other. Created VectorView is not dependent on other, but if underlying data (Vector or Matrix) is deallocated VectorView is invalid.
theplu::yat::utility::VectorView::VectorView | ( | VectorMutable & | other | ) | [explicit] |
copy another VectorMutable
theplu::yat::utility::VectorView::VectorView | ( | VectorMutable & | v, | |
size_t | offset, | |||
size_t | n, | |||
size_t | stride = 1 | |||
) |
VectorView constructor.
Create a view of VectorMutable v, with starting index offset, size n, and an optional stride.
theplu::yat::utility::VectorView::VectorView | ( | Matrix & | m, | |
size_t | i, | |||
bool | row = true | |||
) |
Matrix row/column view constructor.
Create a row/column VectorView view of matrix m, pointing at row/column i. The parameter row is used to set whether the view should be a row or column view. If row is set to true, the view will be a row view (default behaviour), and, naturally, a column view otherwise.
A VectorView view can be used as any VectorMutable with the difference that changes made to the view will also change the object that is viewed.
theplu::yat::utility::VectorView::~VectorView | ( | void | ) |
The destructor.
bool theplu::yat::utility::VectorView::isview | ( | void | ) | const [virtual] |
const VectorView& theplu::yat::utility::VectorView::operator= | ( | const VectorView & | ) |
The assignment operator.
GSL_error | if dimensions mis-match or if assignment fails |
const VectorView& theplu::yat::utility::VectorView::operator= | ( | const VectorBase & | ) |
The assignment operator.
GSL_error | if dimensions mis-match or if assignment fails |
Reimplemented from theplu::yat::utility::VectorBase.
theplu::yat::utility::VectorView::operator proxy | ( | ) |
conversion operator to private proxy class.
void theplu::yat::utility::VectorMutable::all | ( | double | value | ) | [inherited] |
Set all elements to value.
iterator theplu::yat::utility::VectorMutable::begin | ( | void | ) | [inherited] |
const_iterator theplu::yat::utility::VectorBase::begin | ( | void | ) | const [inherited] |
void theplu::yat::utility::VectorMutable::div | ( | const VectorBase & | other | ) | [inherited] |
iterator theplu::yat::utility::VectorMutable::end | ( | void | ) | [inherited] |
const_iterator theplu::yat::utility::VectorBase::end | ( | void | ) | const [inherited] |
gsl_vector* theplu::yat::utility::VectorMutable::gsl_vector_p | ( | void | ) | [inherited] |
const gsl_vector* theplu::yat::utility::VectorBase::gsl_vector_p | ( | void | ) | const [inherited] |
void theplu::yat::utility::VectorMutable::mul | ( | const VectorBase & | other | ) | [inherited] |
This function performs element-wise multiplication, .
GSL_error | if dimensions mis-match. |
double& theplu::yat::utility::VectorMutable::operator() | ( | size_t | i | ) | [inherited] |
Element access operator.
If | GSL range checks are enabled in the underlying GSL library a GSL_error exception is thrown if either index is out of range. |
const double& theplu::yat::utility::VectorBase::operator() | ( | size_t | i | ) | const [inherited] |
Element access operator.
If | GSL range checks are enabled in the underlying GSL library a GSL_error exception is thrown if either index is out of range. |
const VectorMutable& theplu::yat::utility::VectorMutable::operator+= | ( | const VectorBase & | ) | [inherited] |
Addition and assign operator. VectorBase addition, .
GSL_error | if dimensions mis-match. |
const VectorMutable& theplu::yat::utility::VectorMutable::operator+= | ( | double | d | ) | [inherited] |
const VectorMutable& theplu::yat::utility::VectorMutable::operator-= | ( | const VectorBase & | ) | [inherited] |
Subtract and assign operator. VectorBase subtraction, .
GSL_error | if dimensions mis-match. |
const VectorMutable& theplu::yat::utility::VectorMutable::operator-= | ( | double | d | ) | [inherited] |
const VectorMutable& theplu::yat::utility::VectorMutable::operator*= | ( | double | d | ) | [inherited] |
bool theplu::yat::utility::VectorBase::equal | ( | const VectorBase & | , | |
const double | precision = 0 | |||
) | const [inherited] |
Check whether VectorBases are equal within a user defined precision, set by precision.
size_t theplu::yat::utility::VectorBase::size | ( | void | ) | const [inherited] |
bool theplu::yat::utility::VectorBase::operator== | ( | const VectorBase & | ) | const [inherited] |
Comparison operator. Takes linear time.
Checks are performed with exact matching, i.e., rounding off effects may destroy comparison. Use the equal function for comparing elements within a user defined precision.
bool theplu::yat::utility::VectorBase::operator!= | ( | const VectorBase & | ) | const [inherited] |
Comparison operator. Takes linear time.
Checks are performed with exact matching, i.e., rounding off effects may destroy comparison. Use the equal function for comparing elements within a user defined precision.
double theplu::yat::utility::VectorBase::operator* | ( | const VectorBase & | ) | const [inherited] |
gsl_vector* theplu::yat::utility::VectorMutable::vec_ [protected, inherited] |
pointer to underlying GSL vector. Should always point to same gsl_vector as const_vec_ in base class does. This pointer should by used for mutable operations. Do not use this in const functions; use const_vec_ inherited from BaseVector.