Scippy

SoPlex

Sequential object-oriented simPlex

IdxSet Class Reference

Set of indices.Class IdxSet provides a set of indices. At construction it must be given an array of int where to store the indice and its length. The array will from then on be managed by the IdxSet. More...

#include <idxset.h>

Public Member Functions

Construction / destruction
 IdxSet (int n, int imem[], int l=0)
 constructor. More...
 
 IdxSet ()
 default constructor. More...
 
virtual ~IdxSet ()
 destructor. More...
 
IdxSetoperator= (const IdxSet &set)
 assignment operator. More...
 
 IdxSet (const IdxSet &)
 copy constructor. More...
 
Access
int index (int n) const
 access n 'th index. More...
 
int size () const
 returns the number of used indices. More...
 
int max () const
 returns the maximal number of indices which can be stored in IdxSet. More...
 
int dim () const
 returns the maximal index. More...
 
int pos (int i) const
 returns the position of index i. More...
 
Modification
void add (int n)
 appends n uninitialized indices. More...
 
void add (const IdxSet &set)
 appends all indices of set. More...
 
void add (int n, const int i[])
 appends n indices in i. More...
 
void addIdx (int i)
 appends index i. More...
 
void remove (int n, int m)
 removes indices at position numbers n through m. More...
 
void remove (int n)
 removes n 'th index. More...
 
void clear ()
 removes all indices. More...
 
Consistency check
bool isConsistent () const
 consistency check. More...
 

Protected Attributes

Data
int num
 number of used indices More...
 
int len
 length of array idx More...
 
int * idx
 array of indices More...
 
bool freeArray
 true iff idx should be freed inside of this object More...
 

Detailed Description

Set of indices.

Class IdxSet provides a set of indices. At construction it must be given an array of int where to store the indice and its length. The array will from then on be managed by the IdxSet.

Indices are implicitely numbered from 0 thru size()-1. They can be accessed (and altered) via method index() with the desired index number as argument. Range checking is performed in the debug version.

Indices may be added or removed from the set, by calling add() or remove() methods, respectively. However, no IdxSet can hold more then max() indices, i.e. the number given at the constructor.

When removing indices, the remaining ones are renumbered. However, all indices before the first removed index keep their number unchanged.

The internal structure of an IdxSet consists of an array idx storing the indices, its length len, and the actually used number of indices num. The class IdxSet doesn't allocate memory for the idx array. Instead, the user has to provide an adequate buffer to the constructor.

An IdxSet cannot be extended to fit more than max() elements. If necessary, the user must explicitely provide the IdxSet with a suitable memory. Alternatively, one can use DIdxSets which provide the required memory managemant.

Definition at line 56 of file idxset.h.

Constructor & Destructor Documentation

◆ IdxSet() [1/3]

IdxSet ( int  n,
int  imem[],
int  l = 0 
)

constructor.

The constructur receives the index memory imem to use for saving its indices. This must be large enough to fit n indices. l can be given to construct an IdxSet initialized to the l first indices in imem.

Definition at line 80 of file idxset.h.

References IdxSet::isConsistent().

◆ IdxSet() [2/3]

IdxSet ( )

default constructor.

The default constructor creates an index set with an empty index space. You cannot store any indices in an IdxSet created with the default constructor.

Definition at line 91 of file idxset.h.

References IdxSet::isConsistent().

Referenced by IdxSet::~IdxSet().

◆ ~IdxSet()

virtual ~IdxSet ( )
virtual

destructor.

Definition at line 98 of file idxset.h.

References IdxSet::IdxSet(), IdxSet::operator=(), and soplex::spx_free().

◆ IdxSet() [3/3]

IdxSet ( const IdxSet old)

Member Function Documentation

◆ add() [1/3]

void add ( int  n)

appends n uninitialized indices.

Definition at line 149 of file idxset.h.

References IdxSet::max(), and IdxSet::size().

Referenced by DIdxSet::add(), IdxSet::add(), and SSVectorBase< Real >::setValue().

◆ add() [2/3]

void add ( const IdxSet set)

appends all indices of set.

Definition at line 156 of file idxset.h.

References IdxSet::add(), and IdxSet::size().

◆ add() [3/3]

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

appends n indices in i.

Definition at line 41 of file idxset.cpp.

References IdxSet::add(), IdxSet::idx, IdxSet::max(), and IdxSet::size().

◆ addIdx()

void addIdx ( int  i)

appends index i.

Definition at line 165 of file idxset.h.

References IdxSet::max(), and IdxSet::size().

Referenced by SSVectorBase< Real >::add(), DIdxSet::addIdx(), and SSVectorBase< Real >::assign2product().

◆ clear()

◆ dim()

int dim ( ) const

returns the maximal index.

Definition at line 21 of file idxset.cpp.

References IdxSet::idx, and IdxSet::size().

Referenced by SSVectorBase< Real >::isConsistent(), and IdxSet::max().

◆ index()

◆ isConsistent()

bool isConsistent ( ) const

◆ max()

◆ operator=()

IdxSet & operator= ( const IdxSet set)

assignment operator.

The assignment operator copies all nonzeros of the right handside IdxSet to the left one. This implies, that the latter must have enough index memory.

Definition at line 71 of file idxset.cpp.

References IdxSet::freeArray, IdxSet::idx, IdxSet::isConsistent(), IdxSet::len, IdxSet::max(), IdxSet::num, IdxSet::size(), soplex::spx_alloc(), and soplex::spx_free().

Referenced by DIdxSet::DIdxSet(), DIdxSet::operator=(), SSVectorBase< Real >::operator=(), SSVectorBase< Real >::setup_and_assign(), SSVectorBase< Real >::SSVectorBase(), and IdxSet::~IdxSet().

◆ pos()

int pos ( int  i) const

returns the position of index i.

Finds the position of the first index i in the IdxSet. If no index i is available in the IdxSet, -1 is returned. Otherwise, index(pos(i)) == i holds.

Definition at line 32 of file idxset.cpp.

References IdxSet::idx, and IdxSet::size().

Referenced by soplex::LPFwriteGenerals(), IdxSet::max(), soplex::MPSreadBounds(), SSVectorBase< Real >::pos(), and SPxLPBase< Real >::writeMPS().

◆ remove() [1/2]

◆ remove() [2/2]

void remove ( int  n)

removes n 'th index.

Todo:
Shouldn't this be an assert instead of an if (see add())

Definition at line 174 of file idxset.h.

References IdxSet::num, and IdxSet::size().

◆ size()

int size ( ) const

returns the number of used indices.

Definition at line 124 of file idxset.h.

References IdxSet::num.

Referenced by DIdxSet::add(), IdxSet::add(), DIdxSet::addIdx(), IdxSet::addIdx(), SPxDevexPR::buildBestPriceVectorEnterCoDim(), SPxSteepPR::buildBestPriceVectorEnterCoDim(), SPxDevexPR::buildBestPriceVectorEnterDim(), SPxSteepPR::buildBestPriceVectorEnterDim(), SPxDevexPR::buildBestPriceVectorLeave(), SPxSteepPR::buildBestPriceVectorLeave(), SPxSolver::computeCoTest(), SPxSolver::computeTest(), DIdxSet::DIdxSet(), IdxSet::dim(), SPxDevexPR::entered4(), SPxSteepPR::entered4(), IdxSet::IdxSet(), IdxSet::index(), IdxSet::isConsistent(), SPxDevexPR::left4(), SPxSteepPR::left4(), soplex::LPFwriteGenerals(), DIdxSet::operator=(), IdxSet::operator=(), SPxSolver::performSolutionPolishing(), IdxSet::pos(), soplex::reconstructVector(), SSVectorBase< Real >::reDim(), IdxSet::remove(), SPxDefaultRT::selectEnter(), SPxDevexPR::selectEnterHyperCoDim(), SPxSteepPR::selectEnterHyperCoDim(), SPxDevexPR::selectEnterHyperDim(), SPxSteepPR::selectEnterHyperDim(), SPxDantzigPR::selectEnterSparseCoDim(), SPxDevexPR::selectEnterSparseCoDim(), SPxSteepPR::selectEnterSparseCoDim(), SPxDantzigPR::selectEnterSparseDim(), SPxDevexPR::selectEnterSparseDim(), SPxSteepPR::selectEnterSparseDim(), SPxDevexPR::selectEnterX(), SPxSteepPR::selectEnterX(), SPxDefaultRT::selectLeave(), SPxDevexPR::selectLeave(), SPxSteepPR::selectLeave(), SPxDevexPR::selectLeaveHyper(), SPxSteepPR::selectLeaveHyper(), SPxDantzigPR::selectLeaveSparse(), SPxDevexPR::selectLeaveSparse(), SPxSteepPR::selectLeaveSparse(), SSVectorBase< Real >::setMax(), DIdxSet::setMax(), SSVectorBase< Real >::size(), SPxSolver::updateCoTest(), SPxSolver::updateFtest(), SPxSolver::updateTest(), and SPxLPBase< Real >::writeMPS().

Member Data Documentation

◆ freeArray

bool freeArray
protected

true iff idx should be freed inside of this object

Definition at line 66 of file idxset.h.

Referenced by IdxSet::IdxSet(), and IdxSet::operator=().

◆ idx

◆ len

◆ num