RVL abstract base class for Hilbert Spaces. More...
#include <space.hh>
Public Member Functions | |
Space () | |
Space (const Space< Scalar > &sp) | |
virtual | ~Space () |
virtual DataContainer * | buildDataContainer () const =0 |
returns a dynamically allocated DataContainer. | |
virtual bool | operator== (const Space< Scalar > &sp) const =0 |
compare two vector spaces - useful for sanity checking in applications | |
bool | operator!= (const Space< Scalar > &sp) const |
virtual bool | isCompatible (DataContainer const &dc) const =0 |
detect compatibility with foreign data container - also useful for sanity checking | |
virtual Scalar | inner (DataContainer const &x, DataContainer const &y) const =0 |
core linear algebra methods | |
virtual void | zero (DataContainer &x) const =0 |
assign to data of zero vector | |
virtual void | linComb (Scalar a, DataContainer const &x, Scalar b, DataContainer &y) const =0 |
linear combination y=ax+by. | |
virtual void | copy (DataContainer &tgt, DataContainer const &src) const |
virtual convenience methods, implemented in the base class using linComb. | |
virtual void | negate (DataContainer &tgt) const |
negate, unary version. | |
virtual void | negate (DataContainer &tgt, DataContainer const &src) const |
negation, binary version. | |
virtual void | scale (DataContainer &tgt, Scalar c) const |
scale, unary version. | |
virtual void | scale (DataContainer &tgt, Scalar c, DataContainer const &src) const |
Scale, binary version. | |
NormRetType | normsq (DataContainer const &x) const |
return Norm Squared. | |
NormRetType | norm (DataContainer const &x) const |
return Norm. | |
Static Public Member Functions | |
static std::shared_ptr< Space < Scalar > > | clonePtr (Space< Scalar > const &sp) |
class method for safe dynamic allocation | |
Protected Member Functions | |
void * | operator new (size_t size) |
virtual Space< Scalar > * | clone () const =0 |
Except within other space classes acting as containers, Spaces should always be allocated on the stack. | |
Static Protected Member Functions | |
static Space< Scalar > * | export_clone (Space< Scalar > const &sp) |
An export version of clone allows Space container classes to own dynamically allocated instances of other spaces, by dynamic copy construction. |
RVL abstract base class for Hilbert Spaces.
A vector space over a field of scalars is set of objects, called vectors, together with two operations, scalar multiplication and vector addition, obeying certain axioms. Hilbert spaces add inner product op.
Access to vector objects is implemented through access to their underlying data structures (DataContainers). The build() method returns a pointer to a dynamically allocated DataContainer.
The three linear algebra methods "teach the DataContainer how to behave like a vector" (S. Scott, Y2K).
Definition at line 56 of file space.hh.
RVL::Space< Scalar >::Space | ( | ) |
RVL::Space< Scalar >::Space | ( | const Space< Scalar > & | sp | ) |
virtual RVL::Space< Scalar >::~Space | ( | ) | [virtual] |
void* RVL::Space< Scalar >::operator new | ( | size_t | size | ) | [protected] |
virtual Space<Scalar>* RVL::Space< Scalar >::clone | ( | ) | const [protected, pure virtual] |
Except within other space classes acting as containers, Spaces should always be allocated on the stack.
Various RVL classes store Space references as data members, and RVL does not reference count. Therefore public dynamic allocation of Spaces risks dangling references. However dynamic space construction in containers (intrusive handles) does not create such a risk. The virtual copy constructor (clone) method is protected, to avoid any possibility of dangling references.
Version 1.0: for those who must, we will allow dynamically allocated spaces - caveat emptor!
Implemented in RVL::StdProductSpace< Scalar >, and RVL::CartesianPowerSpace< Scalar >.
static Space<Scalar>* RVL::Space< Scalar >::export_clone | ( | Space< Scalar > const & | sp | ) | [static, protected] |
static std::shared_ptr< Space<Scalar> > RVL::Space< Scalar >::clonePtr | ( | Space< Scalar > const & | sp | ) | [static] |
virtual DataContainer* RVL::Space< Scalar >::buildDataContainer | ( | ) | const [pure virtual] |
returns a dynamically allocated DataContainer.
The type of this datacontainer encodes the data structure which realizes the storage appropriate for vectors in this space.
Implemented in RVL::StdProductSpace< Scalar >, RVL::CartesianPowerSpace< Scalar >, and RVL::StdSpace< Scalar, DataType >.
virtual bool RVL::Space< Scalar >::operator== | ( | const Space< Scalar > & | sp | ) | const [pure virtual] |
compare two vector spaces - useful for sanity checking in applications
bool RVL::Space< Scalar >::operator!= | ( | const Space< Scalar > & | sp | ) | const |
virtual bool RVL::Space< Scalar >::isCompatible | ( | DataContainer const & | dc | ) | const [pure virtual] |
detect compatibility with foreign data container - also useful for sanity checking
Implemented in RVL::ProductSpace< Scalar >, RVL::CartesianPowerSpace< Scalar >, and RVL::StdSpace< Scalar, DataType >.
virtual Scalar RVL::Space< Scalar >::inner | ( | DataContainer const & | x, | |
DataContainer const & | y | |||
) | const [pure virtual] |
core linear algebra methods
inner product
Implemented in RVL::ProductSpace< Scalar >, RVL::CartesianPowerSpace< Scalar >, and RVL::StdSpace< Scalar, DataType >.
virtual void RVL::Space< Scalar >::zero | ( | DataContainer & | x | ) | const [pure virtual] |
assign to data of zero vector
Implemented in RVL::ProductSpace< Scalar >, RVL::CartesianPowerSpace< Scalar >, and RVL::StdSpace< Scalar, DataType >.
virtual void RVL::Space< Scalar >::linComb | ( | Scalar | a, | |
DataContainer const & | x, | |||
Scalar | b, | |||
DataContainer & | y | |||
) | const [pure virtual] |
linear combination y=ax+by.
Output argument y may not be alised with input argument x.
Implemented in RVL::ProductSpace< Scalar >, RVL::CartesianPowerSpace< Scalar >, and RVL::StdSpace< Scalar, DataType >.
virtual void RVL::Space< Scalar >::copy | ( | DataContainer & | tgt, | |
DataContainer const & | src | |||
) | const [virtual] |
virtual void RVL::Space< Scalar >::negate | ( | DataContainer & | tgt | ) | const [virtual] |
virtual void RVL::Space< Scalar >::negate | ( | DataContainer & | tgt, | |
DataContainer const & | src | |||
) | const [virtual] |
virtual void RVL::Space< Scalar >::scale | ( | DataContainer & | tgt, | |
Scalar | c | |||
) | const [virtual] |
virtual void RVL::Space< Scalar >::scale | ( | DataContainer & | tgt, | |
Scalar | c, | |||
DataContainer const & | src | |||
) | const [virtual] |
NormRetType RVL::Space< Scalar >::normsq | ( | DataContainer const & | x | ) | const |
NormRetType RVL::Space< Scalar >::norm | ( | DataContainer const & | x | ) | const |