Scippy

SoPlex

Sequential object-oriented simPlex

ClassSet< T > Class Template Reference

Set of class objects.Class ClassSet manages of sets of class objects of a template type T. For constructing a ClassSet the maximum number of entries must be given. The current maximum number may be inquired with method max(). More...

#include <classset.h>

Classes

struct  Item
 

Public Member Functions

Extension

Whenever a new element is added to a ClassSet, the latter assigns it a DataKey. For this all methods that extend a ClassSet by one ore more elements are provided with two signatures, one of them having a parameter for returning the assigned DataKey(s).

void add (DataKey &newkey, const T &item)
 adds an element. More...
 
void add (const T &item)
 adds element item. More...
 
void add (DataKey newkey[], const T *item, int n)
 add several items. More...
 
void add (const T *items, int n)
 adds n elements from items. More...
 
void add (DataKey newkey[], const ClassSet< T > &set)
 adds several new items. More...
 
void add (const ClassSet< T > &set)
 adds all elements of set. More...
 
T * create (DataKey &newkey)
 creates new class element in ClassSet. More...
 
T * create ()
 creates new (uninitialized) class element in ClassSet. More...
 
Shrinkage

When elements are removed from a ClassSet, the remaining ones are renumbered from 0 through the new size()-1. How this renumbering is performed will not be revealed, since it might be target of future changes. However, some methods provide a parameter int* perm, which returns the new order after the removal: If perm[i] < 0, the element numbered i prior to the removal operation has been removed from the set. Otherwise, perm[i] = j >= 0 means that the element with number i prior to the removal operation has been renumbered to j. Removing a single element from a ClassSet yields a simple renumbering of the elements: The last element in the set (i.e., element num()-1) is moved to the index of the removed element.

void remove (int removenum)
 removes the removenum 'th element. More...
 
void remove (const DataKey &removekey)
 removes element with key removekey. More...
 
void remove (int perm[])
 remove multiple elements. More...
 
void remove (const DataKey *keys, int n, int *perm)
 remove n elements given by keys and perm. More...
 
void remove (const DataKey *keys, int n)
 remove n elements given by keys. More...
 
void remove (const int *nums, int n, int *perm)
 remove n elements given by nums and perm. More...
 
void remove (const int *nums, int n)
 remove n elements with numbers nums. More...
 
void clear ()
 remove all elements. More...
 
Access

When accessing elements from a ClassSet with one of the index operators, it must be ensured that the index is valid for the ClassSet. If this is not known afore, it is the programmers responsability to ensure this using the inquiry methods below.

T & operator[] (int n)
 
const T & operator[] (int n) const
 returns element number n. More...
 
T & operator[] (const DataKey &k)
 
const T & operator[] (const DataKey &k) const
 returns element with DataKey k. More...
 
Inquiry
int max () const
 returns maximum number of elements that would fit into ClassSet. More...
 
int num () const
 returns number of elements currently in ClassSet. More...
 
int size () const
 returns the maximum DataKey::idx currently in ClassSet. More...
 
DataKey key (int n) const
 returns DataKey of n 'th element in ClassSet. More...
 
DataKey key (const T *item) const
 returns DataKey of element item in ClassSet. More...
 
int number (const DataKey &k) const
 returns the number of the element with DataKey k in ClassSet or -1, if it doesn't exist. More...
 
int number (const T *item) const
 returns the number of element item in ClassSet, throws exception if it doesn't exist. More...
 
bool has (const DataKey &k) const
 Is k a valid DataKey of an element in ClassSet? More...
 
bool has (int n) const
 Is n a valid number of an element in ClassSet? More...
 
bool has (const T *item) const
 Does item belong to ClassSet? More...
 
Miscellaneous
ptrdiff_t reMax (int newmax=0)
 resets max() to newmax. More...
 
bool isConsistent () const
 consistency check. More...
 
Constructors / Destructors
 ClassSet (int pmax=8)
 default constructor. More...
 
 ClassSet (const ClassSet &old)
 copy constructor. More...
 
ClassSet< T > & operator= (const ClassSet< T > &rhs)
 assignment operator. More...
 
 ~ClassSet ()
 destructor. More...
 

Protected Attributes

Types
struct soplex::ClassSet::Itemtheitem
 array of elements in the ClassSet More...
 
Data
DataKeythekey
 DataKey::idx's of elements. More...
 
int themax
 length of arrays theitem and thekey More...
 
int thesize
 highest used element in theitem More...
 
int thenum
 number of elements in ClassSet More...
 
int firstfree
 first unused element in theitem More...
 

Detailed Description

template<class T>
class soplex::ClassSet< T >

Set of class objects.

Class ClassSet manages of sets of class objects of a template type T. For constructing a ClassSet the maximum number of entries must be given. The current maximum number may be inquired with method max().

Adding more then max() elements to a ClassSet will core dump. However, method reMax() allows to reset max() without loss of elements currently in the ClassSet. The current number of elements in a ClassSet is returned by method num().

Adding elements to a ClassSet is done via methods add() or create(), while remove() removes elements from a ClassSet. When adding an element to a ClassSet the new element is assigned a DataKey. DataKeys serve to access CLASS elements in a set via a version of the subscript operator[](DataKey).

For convenience all elements in a ClassSet are implicitely numbered from 0 through num()-1 and can be accessed with these numbers using a 2nd subscript operator[](int). The reason for providing DataKeys to access elements of a ClassSet is that the Key of an element remains unchanged as long as the element is a member of the ClassSet, while the numbers will change in an undefined way, if other elements are added to or removed from the ClassSet.

The elements in a ClassSet and their DataKeys are stored in two arrays:

  • theitem keeps the objects along with their number stored in item.
  • thekey keeps the DataKey::idx's of the elements in a ClassSet.

Both arrays have size themax.

In thekey only elements 0 thru thenum-1 contain DataKey::idx's of valid elements, i.e., elements currently in the ClassSet. The current number of elements in the ClassSet is counted in thenum.

In theitem only elements 0 thru thesize-1 are used, but only some of them actually contain real class elements of the ClassSet. They are recognized by having info >= 0, which gives the number of that element. Otherwise info < 0 indicates an unused element. Unused elements are linked in a single linked list: starting with element -firstfree-1, the next free element is given by -info-1. The last free element in the list is marked by info == -themax-1. Finally all elements in theitem with index >= thesize are unused as well.

Definition at line 94 of file classset.h.

Constructor & Destructor Documentation

◆ ClassSet() [1/2]

ClassSet ( int  pmax = 8)
explicit

default constructor.

Definition at line 563 of file classset.h.

◆ ClassSet() [2/2]

ClassSet ( const ClassSet< T > &  old)

copy constructor.

Definition at line 593 of file classset.h.

◆ ~ClassSet()

~ClassSet ( )

destructor.

Definition at line 677 of file classset.h.

Member Function Documentation

◆ add() [1/6]

void add ( DataKey newkey,
const T &  item 
)

adds an element.

Definition at line 131 of file classset.h.

Referenced by ClassSet< soplex::SVSetBase::DLPSV >::add().

◆ add() [2/6]

void add ( const T &  item)

adds element item.

Returns
0 on success and non-zero, if an error occured.

Definition at line 142 of file classset.h.

◆ add() [3/6]

void add ( DataKey  newkey[],
const T *  item,
int  n 
)

add several items.

Definition at line 153 of file classset.h.

◆ add() [4/6]

void add ( const T *  items,
int  n 
)

adds n elements from items.

Definition at line 163 of file classset.h.

◆ add() [5/6]

void add ( DataKey  newkey[],
const ClassSet< T > &  set 
)

adds several new items.

Definition at line 173 of file classset.h.

◆ add() [6/6]

void add ( const ClassSet< T > &  set)

adds all elements of set.

Definition at line 182 of file classset.h.

◆ clear()

void clear ( )

remove all elements.

Definition at line 350 of file classset.h.

Referenced by ClassSet< soplex::SVSetBase::DLPSV >::operator=().

◆ create() [1/2]

T* create ( DataKey newkey)

creates new class element in ClassSet.

Returns
Pointer to the newly created element.

Definition at line 193 of file classset.h.

◆ create() [2/2]

T* create ( )

creates new (uninitialized) class element in ClassSet.

Returns
Pointer to the newly created element.

Definition at line 214 of file classset.h.

Referenced by ClassSet< soplex::SVSetBase::DLPSV >::add(), and ClassSet< soplex::SVSetBase::DLPSV >::create().

◆ has() [1/3]

bool has ( const DataKey k) const

Is k a valid DataKey of an element in ClassSet?

Definition at line 452 of file classset.h.

Referenced by ClassSet< soplex::SVSetBase::DLPSV >::remove().

◆ has() [2/3]

bool has ( int  n) const

Is n a valid number of an element in ClassSet?

Definition at line 458 of file classset.h.

◆ has() [3/3]

bool has ( const T *  item) const

Does item belong to ClassSet?

Definition at line 464 of file classset.h.

◆ isConsistent()

bool isConsistent ( ) const

◆ key() [1/2]

DataKey key ( int  n) const

returns DataKey of n 'th element in ClassSet.

Definition at line 415 of file classset.h.

◆ key() [2/2]

DataKey key ( const T *  item) const

returns DataKey of element item in ClassSet.

Definition at line 422 of file classset.h.

◆ max()

◆ num()

◆ number() [1/2]

int number ( const DataKey k) const

returns the number of the element with DataKey k in ClassSet or -1, if it doesn't exist.

Definition at line 430 of file classset.h.

Referenced by ClassSet< soplex::SVSetBase::DLPSV >::has(), ClassSet< soplex::SVSetBase::DLPSV >::key(), and ClassSet< soplex::SVSetBase::DLPSV >::remove().

◆ number() [2/2]

int number ( const T *  item) const

returns the number of element item in ClassSet, throws exception if it doesn't exist.

Todo:
Please check whether this is correctly implemented!

Definition at line 441 of file classset.h.

◆ operator=()

ClassSet< T >& operator= ( const ClassSet< T > &  rhs)

assignment operator.

The assignment operator involves reMax()ing the lvalue ClassSet to the size needed for copying all elements of the rvalue. After the assignment all DataKeys from the lvalue are valid for the rvalue as well. They refer to a copy of the corresponding class elements.

Definition at line 637 of file classset.h.

◆ operator[]() [1/4]

T& operator[] ( int  n)

Definition at line 367 of file classset.h.

◆ operator[]() [2/4]

const T& operator[] ( int  n) const

returns element number n.

Definition at line 373 of file classset.h.

◆ operator[]() [3/4]

T& operator[] ( const DataKey k)

Definition at line 380 of file classset.h.

◆ operator[]() [4/4]

const T& operator[] ( const DataKey k) const

returns element with DataKey k.

Definition at line 386 of file classset.h.

◆ reMax()

ptrdiff_t reMax ( int  newmax = 0)

resets max() to newmax.

This method will not succeed if newmax < size(), in which case newmax == size() will be taken. As generally this method involves copying the ClassSets elements in memory, reMax() returns the number of bytes the addresses of elements in the ClassSet have been moved. Note, that this is identical for all elements in the ClassSet.

Definition at line 492 of file classset.h.

Referenced by ClassSet< soplex::SVSetBase::DLPSV >::operator=().

◆ remove() [1/7]

void remove ( int  removenum)

removes the removenum 'th element.

Definition at line 238 of file classset.h.

◆ remove() [2/7]

void remove ( const DataKey removekey)

removes element with key removekey.

Definition at line 264 of file classset.h.

◆ remove() [3/7]

void remove ( int  perm[])

remove multiple elements.

This method removes all elements for the ClassSet with an index i such that perm[i] < 0. Upon completion, perm contains the new numbering of elements.

Definition at line 274 of file classset.h.

◆ remove() [4/7]

void remove ( const DataKey keys,
int  n,
int *  perm 
)

remove n elements given by keys and perm.

Definition at line 311 of file classset.h.

◆ remove() [5/7]

void remove ( const DataKey keys,
int  n 
)

remove n elements given by keys.

Definition at line 324 of file classset.h.

◆ remove() [6/7]

void remove ( const int *  nums,
int  n,
int *  perm 
)

remove n elements given by nums and perm.

Definition at line 330 of file classset.h.

◆ remove() [7/7]

void remove ( const int *  nums,
int  n 
)

remove n elements with numbers nums.

Definition at line 343 of file classset.h.

◆ size()

Member Data Documentation

◆ firstfree

◆ theitem

◆ thekey

DataKey* thekey
protected

◆ themax

int themax
protected

◆ thenum

◆ thesize

int thesize
protected