Scippy

SoPlex

Sequential object-oriented simPlex

Dynamic sparse vectors.Class DSVectorBase implements dynamic sparse vectors, i.e. SVectorBases with an automatic memory management. This allows the user to freely add() as many nonzeros to a DSVectorBase as desired, without any precautions. For saving memory method setMax() allows to reduce memory consumption to the amount really required. More...

#include <dsvectorbase.h>

Inheritance diagram for DSVectorBase< R >:

Public Member Functions

template<>
 ~DSVectorBase ()
 Destructor (specialization for Real). More...
 
template<>
void setMax (int newmax)
 Reset nonzero memory to >= newmax. More...
 
Construction, assignment, and destruction
 DSVectorBase (int n=8)
 Default constructor. More...
 
template<class S >
 DSVectorBase (const SVectorBase< S > &old)
 Copy constructor. More...
 
 DSVectorBase (const DSVectorBase< R > &old)
 Copy constructor. More...
 
template<class S >
 DSVectorBase (const DSVectorBase< S > &old)
 Copy constructor. More...
 
template<class S >
 DSVectorBase (const VectorBase< S > &vec)
 Copy constructor. More...
 
template<class S >
 DSVectorBase (const SSVectorBase< S > &old)
 Copy constructor. More...
 
template<class S >
DSVectorBase< R > & operator= (const SVectorBase< S > &vec)
 Assignment operator. More...
 
DSVectorBase< R > & operator= (const DSVectorBase< R > &vec)
 Assignment operator. More...
 
template<class S >
DSVectorBase< R > & operator= (const DSVectorBase< S > &vec)
 Assignment operator. More...
 
template<class S >
DSVectorBase< R > & operator= (const VectorBase< S > &vec)
 Assignment operator. More...
 
template<class S >
DSVectorBase< R > & operator= (const SSVectorBase< S > &vec)
 Assignment operator. More...
 
virtual ~DSVectorBase ()
 Destructor. More...
 
Modification
template<class S >
void add (const SVectorBase< S > &vec)
 Append nonzeros of sv. More...
 
void add (int i, const R &v)
 Append one nonzero (i,v). More...
 
void add (int i)
 Append one uninitialized nonzero. More...
 
void add (int n, const int i[], const R v[])
 Append n nonzeros. More...
 
void setMax (int newmax=1)
 Reset nonzero memory to >= newmax. More...
 
Utilities
bool isConsistent () const
 Consistency check. More...
 
- Public Member Functions inherited from SVectorBase< R >
template<>
SVectorBase< Real > & operator= (const VectorBase< S > &vec)
 Assignment operator (specialization for Real). More...
 
template<>
Real operator* (const SVectorBase< S > &w) const
 specialization for inner product for sparse vectors More...
 
int size () const
 Number of used indices. More...
 
int max () const
 Maximal number of indices. More...
 
int dim () const
 Dimension of the vector defined as maximal index + 1. More...
 
int number (int i) const
 Number of index i. More...
 
operator[] (int i) const
 Value to index i. More...
 
Nonzero< R > & element (int n)
 Reference to the n 'th nonzero element. More...
 
const Nonzero< R > & element (int n) const
 The n 'th nonzero element. More...
 
int & index (int n)
 Reference to index of n 'th nonzero. More...
 
int index (int n) const
 Index of n 'th nonzero. More...
 
R & value (int n)
 Reference to value of n 'th nonzero. More...
 
const R & value (int n) const
 Value of n 'th nonzero. More...
 
void add (int i, const R &v)
 Append one nonzero (i,v). More...
 
void add (int i)
 Append one uninitialized nonzero. More...
 
void add (const SVectorBase &sv)
 Append nonzeros of sv. More...
 
void add (int n, const int i[], const R v[])
 Append n nonzeros. More...
 
template<class S >
void add (int n, const int i[], const S v[])
 Append n nonzeros. More...
 
void add (int n, const Nonzero< R > e[])
 Append n nonzeros. More...
 
void remove (int n, int m)
 Remove nonzeros n thru m. More...
 
void remove (int n)
 Remove n 'th nonzero. More...
 
void clear ()
 Remove all indices. More...
 
void sort ()
 Sort nonzeros to increasing indices. More...
 
maxAbs () const
 Maximum absolute value, i.e., infinity norm. More...
 
minAbs () const
 Minimum absolute value. More...
 
Real length () const
 Floating point approximation of euclidian norm (without any approximation guarantee). More...
 
length2 () const
 Squared norm. More...
 
SVectorBase< R > & operator*= (const R &x)
 Scaling. More...
 
operator* (const VectorBase< R > &w) const
 Inner product. More...
 
template<class S >
operator* (const SVectorBase< S > &w) const
 inner product for sparse vectors More...
 
 SVectorBase (int n=0, Nonzero< R > *p_mem=0)
 Default constructor. More...
 
template<class S >
SVectorBase< R > & operator= (const VectorBase< S > &vec)
 Assignment operator. More...
 
SVectorBase< R > & operator= (const SVectorBase< R > &sv)
 Assignment operator. More...
 
template<class S >
SVectorBase< R > & operator= (const SVectorBase< S > &sv)
 Assignment operator. More...
 
template<class S >
SVectorBase< R > & assignArray (const S *rowValues, const int *rowIndices, int rowSize)
 Assignment operator. More...
 
template<class S >
SVectorBase< R > & operator= (const SSVectorBase< S > &sv)
 Assignment operator. More...
 
Nonzero< R > * mem () const
 get pointer to internal memory. More...
 
void set_size (int s)
 Set size of the vector. More...
 
void set_max (int m)
 Set the maximum number of nonzeros in the vector. More...
 
void setMem (int n, Nonzero< R > *elmem)
 Set the memory area where the nonzeros will be stored. More...
 
bool isConsistent () const
 Consistency check. More...
 

Private Member Functions

template<>
void allocMem (int n)
 Allocate memory for n nonzeros (specialization for Real). More...
 
Private helpers
void allocMem (int n)
 Allocate memory for n nonzeros. More...
 
void makeMem (int n)
 Ensure there is room for n new nonzeros. More...
 

Private Attributes

Data
Nonzero< R > * theelem
 Memory. More...
 

Friends

class SLinSolver
 

Additional Inherited Members

- Public Types inherited from SVectorBase< R >
typedef Nonzero< R > Element
 

Detailed Description

template<class R>
class soplex::DSVectorBase< R >

Dynamic sparse vectors.

Class DSVectorBase implements dynamic sparse vectors, i.e. SVectorBases with an automatic memory management. This allows the user to freely add() as many nonzeros to a DSVectorBase as desired, without any precautions. For saving memory method setMax() allows to reduce memory consumption to the amount really required.

Todo:
Both DSVectorBase and SVectorBase have a member variable that points to allocated memory. This does not seem to make too much sense. Why doesn't DSVectorBase use the element of its base class?

Definition at line 42 of file dsvectorbase.h.

Constructor & Destructor Documentation

DSVectorBase ( int  n = 8)
explicit

Default constructor.

Creates a DSVectorBase ready to hold n nonzeros. However, the memory is automatically enlarged, if more nonzeros are added to the DSVectorBase.

Definition at line 94 of file dsvectorbase.h.

DSVectorBase ( const SVectorBase< S > &  old)
explicit

Copy constructor.

Definition at line 104 of file dsvectorbase.h.

DSVectorBase ( const DSVectorBase< R > &  old)

Copy constructor.

The redundancy with the copy constructor below is necessary since otherwise the compiler doesn't realize that it could use the more general one with S = R and generates a shallow copy constructor.

Definition at line 117 of file dsvectorbase.h.

DSVectorBase ( const DSVectorBase< S > &  old)

Copy constructor.

Definition at line 129 of file dsvectorbase.h.

DSVectorBase ( const VectorBase< S > &  vec)
explicit

Copy constructor.

Definition at line 1016 of file basevectors.h.

References DSVectorBase< R >::allocMem(), VectorBase< R >::dim(), and DSVectorBase< R >::isConsistent().

DSVectorBase ( const SSVectorBase< S > &  old)
explicit
virtual ~DSVectorBase ( )
virtual

Destructor.

Definition at line 197 of file dsvectorbase.h.

Destructor (specialization for Real).

Definition at line 318 of file dsvectorbase.h.

References soplex::spx_free(), and DSVectorBase< R >::theelem.

Member Function Documentation

void add ( int  i,
const R &  v 
)

Append one nonzero (i,v).

Definition at line 224 of file dsvectorbase.h.

void add ( int  i)

Append one uninitialized nonzero.

Definition at line 231 of file dsvectorbase.h.

void add ( int  n,
const int  i[],
const R  v[] 
)

Append n nonzeros.

Definition at line 238 of file dsvectorbase.h.

void allocMem ( int  n)
private

Allocate memory for n nonzeros.

Definition at line 62 of file dsvectorbase.h.

Referenced by DSVectorBase< R >::DSVectorBase(), and DSVectorBase< Real >::DSVectorBase().

void allocMem ( int  n)
private

Allocate memory for n nonzeros (specialization for Real).

Definition at line 307 of file dsvectorbase.h.

References SVectorBase< R >::setMem(), soplex::spx_alloc(), and DSVectorBase< R >::theelem.

void makeMem ( int  n)
private

Ensure there is room for n new nonzeros.

Definition at line 71 of file dsvectorbase.h.

Referenced by DSVectorBase< Real >::add(), DSVectorBase< Real >::operator=(), and DSVectorBase< R >::operator=().

DSVectorBase<R>& operator= ( const SVectorBase< S > &  vec)

Assignment operator.

Definition at line 149 of file dsvectorbase.h.

Referenced by DSVectorBase< Real >::operator=().

DSVectorBase<R>& operator= ( const DSVectorBase< R > &  vec)

Assignment operator.

Definition at line 162 of file dsvectorbase.h.

DSVectorBase<R>& operator= ( const DSVectorBase< S > &  vec)

Assignment operator.

Definition at line 176 of file dsvectorbase.h.

DSVectorBase< R > & operator= ( const VectorBase< S > &  vec)
DSVectorBase< R > & operator= ( const SSVectorBase< S > &  vec)
void setMax ( int  newmax = 1)

Reset nonzero memory to >= newmax.

This methods resets the memory consumption to newmax. However, if newmax < size(), it is reset to size() only.

Definition at line 248 of file dsvectorbase.h.

Referenced by SoPlex::_ensureDSVectorRationalMemory(), SPxSolver::computeDualfarkas4Col(), SPxSolver::computeDualfarkas4Row(), SPxSolver::computePrimalray4Col(), SPxSolver::computePrimalray4Row(), DSVectorBase< Real >::makeMem(), and DSVectorBase< R >::operator=().

void setMax ( int  newmax)

Reset nonzero memory to >= newmax.

This methods resets the memory consumption to newmax. However, if newmax < size(), it is reset to size() only (specialization for Real).

Definition at line 332 of file dsvectorbase.h.

References SVectorBase< R >::set_size(), SVectorBase< R >::setMem(), SVectorBase< R >::size(), soplex::spx_realloc(), and DSVectorBase< R >::theelem.

Friends And Related Function Documentation

friend class SLinSolver
friend

Definition at line 44 of file dsvectorbase.h.

Member Data Documentation

Nonzero<R>* theelem
private