SoPlex Documentation
Loading...
Searching...
No Matches
SVSetBase< R > Class Template Reference

Sparse vector set. More...

#include <svsetbase.h>

Inheritance diagram for SVSetBase< R >:
ClassArray< Nonzero< R > > LPColSetBase< Rational > LPColSetBase< R > LPRowSetBase< R > SPxLPBase< R > SPxLPBase< R > SPxSolverBase< R > SPxSolverBase< R >

Classes

class  DLPSV
 SVectorBase with prev/next pointers. More...
 

Public Member Functions

Extension
void add (const SVectorBase< R > &svec)
 Adds svec to the set.
 
void add (DataKey &nkey, const SVectorBase< R > &svec)
 Adds svec to SVSetBase.
 
template<class S >
void add (DataKey &nkey, const S *rowValues, const int *rowIndices, int rowSize)
 Adds svec to SVSetBase.
 
void add (const SVectorBase< R > svec[], int n)
 Adds all n SVectorBases in the array svec to the set.
 
void add (DataKey nkey[], const SVectorBase< R > svec[], int n)
 Adds n SVectorBases to SVSetBase.
 
template<class S >
void add (const SVSetBase< S > &pset)
 Adds all SVectorBases in pset to SVSetBase.
 
template<class S >
void add (DataKey nkey[], const SVSetBase< S > &pset)
 Adds all SVectorBases of pset to SVSetBase.
 
SVectorBase< R > * create (int idxmax=0)
 Creates new SVectorBase in set.
 
SVectorBase< R > * create (DataKey &nkey, int idxmax=-1)
 Creates new SVectorBase in set.
 
void xtend (SVectorBase< R > &svec, int newmax)
 Extends svec to fit newmax nonzeros.
 
void add2 (SVectorBase< R > &svec, int idx, R val)
 Adds nonzero (idx, val) to svec of this SVSetBase.
 
void add2 (SVectorBase< R > &svec, int n, const int idx[], const R val[])
 Adds n nonzeros to svec of this SVSetBase.
 
template<class S >
void add2 (SVectorBase< R > &svec, int n, const int idx[], const S val[])
 Adds n nonzeros to svec of this SVSetBase.
 
Shrinking
void remove (const DataKey &removekey)
 Removes the vector with key removekey from the set.
 
void remove (int removenum)
 Removes the vector with number removenum from the set.
 
void remove (const SVectorBase< R > *svec)
 Removes one SVectorBase from set.
 
void remove (int perm[])
 Removes multiple elements.
 
void remove (const DataKey keys[], int n)
 Removes n SVectorBases from set.
 
void remove (const int nums[], int n)
 Removes n SVectorBases from set.
 
void remove (const DataKey keys[], int n, int *perm)
 
void remove (const int nums[], int n, int *perm)
 
void clear (int minNewSize=-1)
 Removes all SVectorBases from set.
 
Access
SVectorBase< R > & operator[] (int n)
 Gets SVectorBase by number, writeable.
 
const SVectorBase< R > & operator[] (int n) const
 Gets SVectorBase by number.
 
SVectorBase< R > & operator[] (const DataKey &k)
 Gets SVectorBase by DataKey, writeable.
 
const SVectorBase< R > & operator[] (const DataKey &k) const
 Gets SVectorBase by DataKey.
 
Inquiry
int num () const
 Current number of SVectorBases.
 
int max () const
 Current maximum number of SVectorBases.
 
DataKey key (int n) const
 Gets DataKey of vector number.
 
DataKey key (const SVectorBase< R > *svec) const
 Gets DataKey of SVectorBase.
 
int number (const DataKey &k) const
 Gets vector number of DataKey.
 
int number (const SVectorBase< R > *svec) const
 Gets vector number of SVectorBase.
 
bool has (const DataKey &k) const
 True iff SVSetBase contains a SVectorBase for DataKey k.
 
bool has (int n) const
 True iff SVSetBase contains a SVectorBase for vector number n.
 
bool has (const SVectorBase< R > *svec) const
 Is an SVectorBase in the set?
 
Memory Management
int memSize () const
 Used nonzero memory.
 
int memMax () const
 Length of nonzero memory.
 
void memRemax (int newmax)
 Reset length of nonzero memory.
 
void memPack ()
 Garbage collection in nonzero memory.
 
Miscellaneous
void reMax (int newmax=0)
 Resets maximum number of SVectorBases.
 
bool isConsistent () const
 Consistency check.
 
Constructors / destructors
 SVSetBase (int pmax=-1, int pmemmax=-1, double pfac=1.1, double pmemFac=1.2)
 Default constructor.
 
virtual ~SVSetBase ()
 Destructor.
 
SVSetBase< R > & operator= (const SVSetBase< R > &rhs)
 Assignment operator.
 
template<class S >
SVSetBase< R > & operator= (const SVSetBase< S > &rhs)
 Assignment operator.
 
 SVSetBase (const SVSetBase< R > &old)
 Copy constructor.
 
template<class S >
 SVSetBase (const SVSetBase< S > &old)
 Copy constructor.
 

Private Types

typedef ClassArray< Nonzero< R > > SVSetBaseArray
 

Private Member Functions

Helpers
void countUnusedMem ()
 count size of unused memory exactly
 
void updateUnusedMemEstimation (int change)
 update estimation of unused memory
 
void ensurePSVec (int n)
 Provides enough vector memory for n more SVectorBases.
 
void ensureMem (int n, bool shortenLast=true)
 Provides enough nonzero memory for n more Nonzeros.
 
void deleteVec (DLPSV *ps)
 Deleting a vector from the data array and the list.
 

Private Attributes

Data
ClassSet< DLPSVset
 set of SVectorBases
 
IdList< DLPSVlist
 doubly linked list for non-zero management
 
int unusedMem
 an estimate of the unused memory (the difference of max() and size() summed up over all vectors) due to deleteVec() and xtend()
 
int numUnusedMemUpdates
 counter for how often unusedMem has been updated since last exact value
 
Control Parameters
double factor
 sparse vector memory enlargment factor
 

Friends

template<class S >
class SVSetBase
 

Additional Inherited Members

- Protected Member Functions inherited from ClassArray< Nonzero< R > >
Nonzero< R > & operator[] (int n)
 Reference to n 'th element.
 
const Nonzero< R > & operator[] (int n) const
 Reference to n 'th const element.
 
Nonzero< R > & last ()
 Reference to last element.
 
const Nonzero< R > & last () const
 Reference to last const element.
 
Nonzero< R > * get_ptr ()
 Gets a C pointer to the data.
 
const Nonzero< R > * get_const_ptr () const
 Gets a const C pointer to the data.
 
void append (const Nonzero< R > &t)
 Appends element t.
 
void append (int n, const Nonzero< R > t[])
 Appends n elements from t.
 
void append (const ClassArray< Nonzero< R > > &t)
 Appends all elements from t.
 
void insert (int i, int n)
 Inserts n uninitialized elements before i 'th element.
 
void insert (int i, int n, const Nonzero< R > t[])
 Inserts n elements from t before i 'the element.
 
void insert (int i, const ClassArray< Nonzero< R > > &t)
 Inserts all elements from t before i 'th element.
 
void remove (int n=0, int m=1)
 Removes m elements starting at n.
 
void removeLast (int m=1)
 Removes m last elements.
 
void clear ()
 Removes all elements.
 
int size () const
 Returns number of elements.
 
void reSize (int newsize)
 Resets size to newsize.
 
int max () const
 Returns maximum number of elements.
 
ptrdiff_t reMax (int newMax=1, int newSize=-1)
 Resets maximum number of elements.
 
ClassArrayoperator= (const ClassArray &rhs)
 Assignment operator.
 
bool isConsistent () const
 Consistency check.
 
 ClassArray (const ClassArray &old)
 Copy constructor.
 
 ClassArray (int p_size=0, int p_max=0, double p_fac=1.2)
 Default constructor.
 
virtual ~ClassArray ()
 Destructor.
 
- Protected Attributes inherited from ClassArray< Nonzero< R > >
int thesize
 number of used elements in array data
 
int themax
 the length of array data and
 
Nonzero< R > * data
 the array of elements
 
double memFactor
 memory extension factor.
 

Detailed Description

template<class R>
class soplex::SVSetBase< R >

Sparse vector set.

Class SVSetBase provides a set of sparse vectors SVectorBase. All SVectorBases in an SVSetBase share one big memory block for their nonzeros. This memory is referred to as the nonzero memory. The SVectorBases themselves are saved in another memory block referred to as the vector memory. Both memory blocks will grow automatically if required, when adding more SVectorBases to the set or enlarging SVectorBases within the set. For controlling memory consumption, methods are provided to inquire and reset the size of the memory blocks used for vectors and nonzeros.

SVectorBases in an SVSetBase are numbered from 0 thru num()-1. They can be accessed using the index operator[](). When removing SVectorBases of a SVSetBase the remaining ones will be renumbered. However, all SVectorBase with a smaller number than the lowest number of the removed SVectorBases will remain unchanged.

For providing a uniform access to SVectorBases in a set even if others are removed or added, SVSetBase assigns a DataKey to each SVectorBase in the set. Such a DataKey remains unchanged as long as the corresponding SVectorBase is in the SVSetBase, no matter what other SVectorBases are added to or removed from the SVSetBase. Methods are provided for getting the DataKey to a SVectorBase or its number and vice versa. Further, each add() method for enlarging an SVSetBase is provided with two signatures. One of them returns the DataKeys assigned to the SVectorBases added to the SVSetBase.

Definition at line 72 of file svsetbase.h.

Member Typedef Documentation

◆ SVSetBaseArray

template<class R >
typedef ClassArray< Nonzero<R> > SVSetBaseArray
private

Definition at line 78 of file svsetbase.h.

Constructor & Destructor Documentation

◆ SVSetBase() [1/3]

template<class R >
SVSetBase ( int pmax = -1,
int pmemmax = -1,
double pfac = 1.1,
double pmemFac = 1.2 )
explicit

Default constructor.

Definition at line 965 of file svsetbase.h.

◆ ~SVSetBase()

template<class R >
virtual ~SVSetBase ( )
virtual

Destructor.

Definition at line 965 of file svsetbase.h.

◆ SVSetBase() [2/3]

template<class R >
SVSetBase ( const SVSetBase< R > & old)

Copy constructor.

Definition at line 1050 of file svsetbase.h.

◆ SVSetBase() [3/3]

template<class R >
template<class S >
SVSetBase ( const SVSetBase< S > & old)

Copy constructor.

Definition at line 1050 of file svsetbase.h.

Member Function Documentation

◆ add() [1/7]

template<class R >
void add ( const SVectorBase< R > & svec)

Adds svec to the set.

This includes copying its nonzeros to the sets nonzero memory and creating an additional SVectorBase entry in vector memory. If neccessary, the memory blocks are enlarged appropriately.

Definition at line 339 of file svsetbase.h.

References SVSetBase< R >::create(), SVSetBase< R >::ensurePSVec(), and DataArray< T >::size().

Referenced by LPColSetBase< R >::add(), LPRowSetBase< R >::add(), LPRowSetBase< R >::add(), LPColSetBase< R >::add(), LPRowSetBase< R >::add(), LPColSetBase< R >::add(), SVSetBase< R >::add(), SVSetBase< R >::add(), and SVSetBase< R >::operator=().

◆ add() [2/7]

template<class R >
void add ( const SVectorBase< R > svec[],
int n )

Adds all n SVectorBases in the array svec to the set.

Precondition
svec must hold at least n entries.

Definition at line 389 of file svsetbase.h.

References SVSetBase< R >::create(), SVSetBase< R >::ensureMem(), SVSetBase< R >::ensurePSVec(), and ClassArray< Nonzero< R > >::size().

◆ add() [3/7]

template<class R >
template<class S >
void add ( const SVSetBase< S > & pset)

◆ add() [4/7]

template<class R >
template<class S >
void add ( DataKey & nkey,
const S * rowValues,
const int * rowIndices,
int rowSize )

Adds svec to SVSetBase.

Adds SVectorBase svec to the set. This includes copying its nonzeros to the sets nonzero memory and creating an additional SVectorBase entry in vector memory. If neccessary, the memory blocks are enlarged appropriately.

Returns
nkey contains the DataKey, that the SVSetBase has assosicated to the new SVectorBase.

Definition at line 372 of file svsetbase.h.

References SVSetBase< R >::create(), and SVSetBase< R >::ensurePSVec().

◆ add() [5/7]

template<class R >
void add ( DataKey & nkey,
const SVectorBase< R > & svec )

Adds svec to SVSetBase.

Adds SVectorBase svec to the set. This includes copying its nonzeros to the sets nonzero memory and creating an additional SVectorBase entry in vector memory. If neccessary, the memory blocks are enlarged appropriately.

Returns
nkey contains the DataKey, that the SVSetBase has assosicated to the new SVectorBase.

Definition at line 355 of file svsetbase.h.

References SVSetBase< R >::create(), SVSetBase< R >::ensurePSVec(), and DataArray< T >::size().

◆ add() [6/7]

template<class R >
void add ( DataKey nkey[],
const SVectorBase< R > svec[],
int n )

Adds n SVectorBases to SVSetBase.

Adds all n SVectorBases in the array svec to the set.

Returns
nkey contains the DataKeys, that the SVSetBase has assosicated to the new SVectorBases.
Precondition
nkey must be large enough to fit n DataKeys.

Definition at line 413 of file svsetbase.h.

References SVSetBase< R >::add(), SVSetBase< R >::key(), and SVSetBase< R >::num().

◆ add() [7/7]

template<class R >
template<class S >
void add ( DataKey nkey[],
const SVSetBase< S > & pset )

Adds all SVectorBases of pset to SVSetBase.

Adds all n SVectorBases in the pset to an SVSetBase.

Returns
nkey contains the DataKeys, that the SVSetBase has assosicated to the new SVectorBases.
Precondition
nkey must be large enough to fit pset.num() DataKeys.

Definition at line 449 of file svsetbase.h.

References SVSetBase< R >::add(), SVSetBase< R >::key(), and SVSetBase< R >::num().

◆ add2() [1/3]

template<class R >
void add2 ( SVectorBase< R > & svec,
int idx,
R val )

Adds nonzero (idx, val) to svec of this SVSetBase.

Adds one nonzero (idx, val) to SVectorBase svec in the SVSetBase. If svec is not large enough to hold the additional nonzero, it will be automatically enlarged within the set.

Precondition
svec must be an SVectorBase of the SVSetBase.

Definition at line 592 of file svsetbase.h.

References DataArray< T >::size(), and SVSetBase< R >::xtend().

Referenced by LPColSetBase< R >::add2(), LPRowSetBase< R >::add2(), LPColSetBase< R >::add2(), LPRowSetBase< R >::add2(), LPColSetBase< R >::add2(), and LPRowSetBase< R >::add2().

◆ add2() [2/3]

template<class R >
void add2 ( SVectorBase< R > & svec,
int n,
const int idx[],
const R val[] )

Adds n nonzeros to svec of this SVSetBase.

Adds n nonzeros to SVectorBase svec in the SVSetBase. If svec is not large enough to hold the additional nonzeros, it will be automatically enlarged within the set.

Precondition
svec must be an SVectorBase of the SVSetBase.

Definition at line 604 of file svsetbase.h.

References DataArray< T >::size(), and SVSetBase< R >::xtend().

◆ add2() [3/3]

template<class R >
template<class S >
void add2 ( SVectorBase< R > & svec,
int n,
const int idx[],
const S val[] )

Adds n nonzeros to svec of this SVSetBase.

Adds n nonzeros to SVectorBase svec in the SVSetBase. If svec is not large enough to hold the additional nonzeros, it will be automatically enlarged within the set.

Precondition
svec must be an SVectorBase of the SVSetBase.

Definition at line 617 of file svsetbase.h.

References DataArray< T >::size(), and SVSetBase< R >::xtend().

◆ clear()

◆ countUnusedMem()

template<class R >
void countUnusedMem ( )
private

◆ create() [1/2]

template<class R >
SVectorBase< R > * create ( DataKey & nkey,
int idxmax = -1 )

Creates new SVectorBase in set.

The new SVectorBase will be ready to fit at least idxmax nonzeros.

Returns
nkey contains the DataKey associated to the new SVectorBase.

Definition at line 498 of file svsetbase.h.

References SVSetBase< R >::create(), SVSetBase< R >::key(), and SVSetBase< R >::num().

◆ create() [2/2]

◆ deleteVec()

◆ ensureMem()

◆ ensurePSVec()

◆ has() [1/3]

template<class R >
bool has ( const DataKey & k) const

True iff SVSetBase contains a SVectorBase for DataKey k.

Definition at line 821 of file svsetbase.h.

References SVSetBase< R >::set.

Referenced by LPColSetBase< R >::has(), LPRowSetBase< R >::has(), and SVSetBase< R >::xtend().

◆ has() [2/3]

template<class R >
bool has ( const SVectorBase< R > * svec) const

Is an SVectorBase in the set?

Definition at line 833 of file svsetbase.h.

References SVSetBase< R >::set.

◆ has() [3/3]

template<class R >
bool has ( int n) const

True iff SVSetBase contains a SVectorBase for vector number n.

Definition at line 827 of file svsetbase.h.

References SVSetBase< R >::set.

◆ isConsistent()

◆ key() [1/2]

template<class R >
DataKey key ( const SVectorBase< R > * svec) const

Gets DataKey of SVectorBase.

Definition at line 803 of file svsetbase.h.

References SVSetBase< R >::set.

◆ key() [2/2]

◆ max()

template<class R >
int max ( ) const

Current maximum number of SVectorBases.

Definition at line 791 of file svsetbase.h.

References DataArray< T >::max(), and SVSetBase< R >::set.

Referenced by SVSetBase< R >::ensurePSVec(), LPColSetBase< R >::max(), and LPRowSetBase< R >::max().

◆ memMax()

template<class R >
int memMax ( ) const

◆ memPack()

template<class R >
void memPack ( )

Garbage collection in nonzero memory.

Pack the svectors together as tightly as possible. This removes all additional unused memory, i.e., size = max for every svector after the call.

Note: do not call isConsistent() here, because the following might happen: In SPxLP::doAddRows(const LPRowSet& p_set), when adding rows, the sizes of the vectors for the columns of the LP are increased (without yet filling in the data) to recieve the additional entries. This is done by calling xtend() above. xtend() in turn might call this method, which checks the yet unfilled positions, i.e., isConsistent() is likely to fail. In general, isConsistent() should not be called within this class, but in classes further up in the hierarchy.

Definition at line 909 of file svsetbase.h.

References ClassArray< Nonzero< R > >::data, SVSetBase< R >::list, SVSetBase< R >::memMax(), SVSetBase< R >::memSize(), MSG_DEBUG, SVSetBase< R >::numUnusedMemUpdates, ClassArray< Nonzero< R > >::operator[](), ClassArray< Nonzero< R > >::reSize(), DataArray< T >::size(), and SVSetBase< R >::unusedMem.

Referenced by SVSetBase< R >::ensureMem(), LPColSetBase< R >::memPack(), and LPRowSetBase< R >::memPack().

◆ memRemax()

◆ memSize()

◆ num()

◆ number() [1/2]

template<class R >
int number ( const DataKey & k) const

Gets vector number of DataKey.

Definition at line 809 of file svsetbase.h.

References SVSetBase< R >::set.

Referenced by LPColSetBase< R >::number(), LPRowSetBase< R >::number(), and SVSetBase< R >::remove().

◆ number() [2/2]

template<class R >
int number ( const SVectorBase< R > * svec) const

Gets vector number of SVectorBase.

Definition at line 815 of file svsetbase.h.

References SVSetBase< R >::set.

◆ operator=() [1/2]

◆ operator=() [2/2]

template<class R >
template<class S >
SVSetBase< R > & operator= ( const SVSetBase< S > & rhs)

◆ operator[]() [1/4]

template<class R >
SVectorBase< R > & operator[] ( const DataKey & k)

Gets SVectorBase by DataKey, writeable.

Definition at line 767 of file svsetbase.h.

References SVSetBase< R >::set.

◆ operator[]() [2/4]

template<class R >
const SVectorBase< R > & operator[] ( const DataKey & k) const

Gets SVectorBase by DataKey.

Definition at line 773 of file svsetbase.h.

References SVSetBase< R >::set.

◆ operator[]() [3/4]

◆ operator[]() [4/4]

template<class R >
const SVectorBase< R > & operator[] ( int n) const

Gets SVectorBase by number.

Definition at line 761 of file svsetbase.h.

References SVSetBase< R >::set.

◆ reMax()

template<class R >
void reMax ( int newmax = 0)

◆ remove() [1/8]

◆ remove() [2/8]

template<class R >
void remove ( const DataKey keys[],
int n )

Removes n SVectorBases from set.

Precondition
keys must be at least of size n and valid keys

Definition at line 681 of file svsetbase.h.

References DataArray< T >::get_ptr(), SVSetBase< R >::num(), and SVSetBase< R >::remove().

◆ remove() [3/8]

template<class R >
void remove ( const DataKey keys[],
int n,
int * perm )

◆ remove() [4/8]

template<class R >
void remove ( const int nums[],
int n )

Removes n SVectorBases from set.

Precondition
nums must be at least of size n and valid vector numbers

Definition at line 690 of file svsetbase.h.

References DataArray< T >::get_ptr(), SVSetBase< R >::num(), and SVSetBase< R >::remove().

◆ remove() [5/8]

template<class R >
void remove ( const int nums[],
int n,
int * perm )

Removes n SVectorBases from set.

Precondition
nums must be at least of size n
perm must be at least of size num()
Returns
perm is the permutations resulting from this removal: perm[i] < 0 indicates that the element to index i has been removed. Otherwise, perm[i] is the new index of the element with index i before the removal.

Definition at line 715 of file svsetbase.h.

References SVSetBase< R >::num(), and SVSetBase< R >::remove().

◆ remove() [6/8]

template<class R >
void remove ( const SVectorBase< R > * svec)

Removes one SVectorBase from set.

Precondition
svec must be from SVSetBase

Definition at line 649 of file svsetbase.h.

References SVSetBase< R >::key(), and SVSetBase< R >::remove().

◆ remove() [7/8]

template<class R >
void remove ( int perm[])

Removes multiple elements.

Removes all SVectorBases for the SVSetBase with an index i such that perm[i] < 0. Upon completion, perm[i] >= 0 indicates the new index where the i 'th SVectorBase has been moved to due to this removal.

Precondition
perm must point to an array of at least num() integers.

Definition at line 660 of file svsetbase.h.

References SVSetBase< R >::deleteVec(), SVSetBase< R >::num(), DataArray< T >::remove(), and SVSetBase< R >::set.

◆ remove() [8/8]

template<class R >
void remove ( int removenum)

Removes the vector with number removenum from the set.

Precondition
removenum must be a valid vector number from SVSetBase

Definition at line 641 of file svsetbase.h.

References SVSetBase< R >::key(), and SVSetBase< R >::remove().

◆ updateUnusedMemEstimation()

template<class R >
void updateUnusedMemEstimation ( int change)
private

◆ xtend()

Friends And Related Symbol Documentation

◆ SVSetBase

template<class R >
template<class S >
friend class SVSetBase
friend

Definition at line 74 of file svsetbase.h.

Member Data Documentation

◆ factor

template<class R >
double factor
private

sparse vector memory enlargment factor

Definition at line 184 of file svsetbase.h.

Referenced by SVSetBase< R >::ensurePSVec().

◆ list

◆ numUnusedMemUpdates

template<class R >
int numUnusedMemUpdates
private

counter for how often unusedMem has been updated since last exact value

Definition at line 176 of file svsetbase.h.

Referenced by SVSetBase< R >::clear(), SVSetBase< R >::countUnusedMem(), SVSetBase< R >::memPack(), SVSetBase< R >::memRemax(), and SVSetBase< R >::updateUnusedMemEstimation().

◆ set

◆ unusedMem

template<class R >
int unusedMem
private

an estimate of the unused memory (the difference of max() and size() summed up over all vectors) due to deleteVec() and xtend()

Definition at line 175 of file svsetbase.h.

Referenced by SVSetBase< R >::clear(), SVSetBase< R >::countUnusedMem(), SVSetBase< R >::ensureMem(), SVSetBase< R >::memPack(), SVSetBase< R >::memRemax(), and SVSetBase< R >::updateUnusedMemEstimation().