SoPlex Documentation
Loading...
Searching...
No Matches
DataSet< DATA > Class Template Reference

Set of data objects. More...

#include <dataset.h>

Classes

struct  Item
 

Public Member Functions

Extension

Whenever a new element is added to a DataSet, the latter assigns it a DataKey. For this all methods that extend a DataSet 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 DATA &item)
 adds an element.
 
void add (const DATA &item)
 adds element item.
 
void add (DataKey newkey[], const DATA *item, int n)
 add several items.
 
void add (const DATA *items, int n)
 adds n elements from items.
 
void add (DataKey newkey[], const DataSet< DATA > &set)
 adds several new items.
 
void add (const DataSet< DATA > &set)
 adds all elements of set.
 
DATAcreate (DataKey &newkey)
 creates new data element in DataSet.
 
DATAcreate ()
 creates new (uninitialized) data element in DataSet.
 
Shrinkage

When elements are removed from a DataSet, 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 DataSet 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.
 
void remove (const DataKey &removekey)
 removes element with key removekey.
 
void remove (int perm[])
 remove multiple elements.
 
void remove (const DataKey *keys, int n, int *perm)
 remove n elements given by keys and perm.
 
void remove (const DataKey *keys, int n)
 remove n elements given by keys.
 
void remove (const int *nums, int n, int *perm)
 remove n elements given by nums and perm.
 
void remove (const int *nums, int n)
 remove n elements with numbers nums.
 
void clear ()
 remove all elements.
 
Access

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

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

Protected Attributes

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

Detailed Description

template<class DATA>
class soplex::DataSet< DATA >

Set of data objects.

Class DataSet manages of sets of data objects of a template type DATA. For constructing a DataSet 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 DataSet will core dump. However, method reMax() allows to reset max() without loss of elements currently in the DataSet. The current number of elements in a DataSet is returned by method num().

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

For convenience all elements in a DataSet 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 DataSet is that the Key of an element remains unchanged as long as the element is a member of the DataSet, while the numbers will change in an undefined way, if other elements are added to or removed from the DataSet.

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

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

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 DataSet. The current number of elements in the DataSet is counted in thenum.

In theitem only elements 0 thru thesize-1 are used, but only some of them actually contain real data elements of the DataSet. 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.

Warning
malloc/realloc and memcpy are used to handle the members of the set. If you use DataSet with something that is not a Data Object you will be in severe trouble.

Definition at line 96 of file dataset.h.

Constructor & Destructor Documentation

◆ DataSet() [1/2]

◆ DataSet() [2/2]

◆ ~DataSet()

template<class DATA >
~DataSet ( )

destructor.

Definition at line 648 of file dataset.h.

References soplex::spx_free(), DataSet< DATA >::theitem, and DataSet< DATA >::thekey.

Member Function Documentation

◆ add() [1/6]

template<class DATA >
void add ( const DATA & item)

adds element item.

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

Definition at line 146 of file dataset.h.

References DataSet< DATA >::create(), and DataSet< DATA >::number().

◆ add() [2/6]

template<class DATA >
void add ( const DATA * items,
int n )

adds n elements from items.

Definition at line 166 of file dataset.h.

References DataSet< DATA >::add(), DataSet< DATA >::max(), DataSet< DATA >::num(), and DataSet< DATA >::number().

◆ add() [3/6]

template<class DATA >
void add ( const DataSet< DATA > & set)

adds all elements of set.

Definition at line 185 of file dataset.h.

References DataSet< DATA >::add(), DataSet< DATA >::max(), DataSet< DATA >::num(), and DataSet< DATA >::number().

◆ add() [4/6]

template<class DATA >
void add ( DataKey & newkey,
const DATA & item )

◆ add() [5/6]

template<class DATA >
void add ( DataKey newkey[],
const DATA * item,
int n )

add several items.

Definition at line 156 of file dataset.h.

References DataSet< DATA >::add(), DataSet< DATA >::max(), DataSet< DATA >::num(), and DataSet< DATA >::number().

◆ add() [6/6]

template<class DATA >
void add ( DataKey newkey[],
const DataSet< DATA > & set )

adds several new items.

Definition at line 176 of file dataset.h.

References DataSet< DATA >::add(), DataSet< DATA >::max(), DataSet< DATA >::num(), and DataSet< DATA >::number().

◆ clear()

template<class DATA >
void clear ( )

◆ create() [1/2]

template<class DATA >
DATA * create ( )

creates new (uninitialized) data element in DataSet.

Returns
Pointer to the newly created element.

Definition at line 217 of file dataset.h.

References DataSet< DATA >::create(), and DataSet< DATA >::number().

Referenced by DataSet< DATA >::add(), DataSet< DATA >::add(), and DataSet< DATA >::create().

◆ create() [2/2]

◆ has() [1/3]

template<class DATA >
bool has ( const DATA * item) const

Does item belong to DataSet?

Definition at line 467 of file dataset.h.

References DataSet< DATA >::number().

◆ has() [2/3]

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

Is k a valid DataKey of an element in DataSet?

Definition at line 455 of file dataset.h.

References DataSet< DATA >::Item::info, DataSet< DATA >::number(), and DataSet< DATA >::theitem.

Referenced by NameSet::has(), NameSet::has(), and DataSet< DATA >::remove().

◆ has() [3/3]

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

Is n a valid number of an element in DataSet?

Definition at line 461 of file dataset.h.

References DataSet< DATA >::num(), and DataSet< DATA >::number().

◆ isConsistent()

◆ key() [1/2]

template<class DATA >
DataKey key ( const DATA * item) const

returns DataKey of element item in DataSet.

Definition at line 425 of file dataset.h.

References DataSet< DATA >::number(), and DataSet< DATA >::thekey.

◆ key() [2/2]

template<class DATA >
DataKey key ( int n) const

returns DataKey of n 'th element in DataSet.

Definition at line 418 of file dataset.h.

References DataSet< DATA >::num(), DataSet< DATA >::number(), and DataSet< DATA >::thekey.

Referenced by NameSet::key().

◆ max()

template<class DATA >
int max ( ) const

◆ num()

◆ number() [1/2]

template<class DATA >
int number ( const DATA * item) const

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

Todo
Please check whether this is correctly implemented!

Definition at line 444 of file dataset.h.

References DataSet< DATA >::Item::info, DataSet< DATA >::number(), DataSet< DATA >::size(), and DataSet< DATA >::theitem.

◆ number() [2/2]

◆ operator=()

template<class DATA >
DataSet< DATA > & operator= ( const DataSet< DATA > & rhs)

assignment operator.

The assignment operator involves reMax()ing the lvalue DataSet 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 data elements.

Definition at line 608 of file dataset.h.

References DataSet< DATA >::clear(), DataSet< DATA >::firstfree, DataSet< DATA >::Item::info, DataSet< DATA >::isConsistent(), DataSet< DATA >::max(), DataSet< DATA >::num(), DataSet< DATA >::number(), DataSet< DATA >::reMax(), DataSet< DATA >::size(), DataSet< DATA >::theitem, DataSet< DATA >::thekey, DataSet< DATA >::themax, DataSet< DATA >::thenum, and DataSet< DATA >::thesize.

◆ operator[]() [1/4]

◆ operator[]() [2/4]

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

◆ operator[]() [3/4]

◆ operator[]() [4/4]

◆ reMax()

template<class DATA >
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 DataSets elements in memory, reMax() returns the number of bytes the addresses of elements in the DataSet have been moved. Note, that this is identical for all elements in the DataSet.

Definition at line 495 of file dataset.h.

References DataSet< DATA >::firstfree, DataSet< DATA >::Item::info, DataSet< DATA >::number(), DataSet< DATA >::size(), soplex::spx_realloc(), DataSet< DATA >::theitem, DataSet< DATA >::thekey, and DataSet< DATA >::themax.

Referenced by DataSet< DATA >::operator=(), and NameSet::reMax().

◆ remove() [1/7]

template<class DATA >
void remove ( const DataKey & removekey)

removes element with key removekey.

Definition at line 267 of file dataset.h.

References DataSet< DATA >::number(), and DataSet< DATA >::remove().

◆ remove() [2/7]

template<class DATA >
void remove ( const DataKey * keys,
int n )

remove n elements given by keys.

Definition at line 327 of file dataset.h.

References DataArray< T >::get_ptr(), DataSet< DATA >::num(), DataSet< DATA >::number(), and DataSet< DATA >::remove().

◆ remove() [3/7]

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

remove n elements given by keys and perm.

Definition at line 314 of file dataset.h.

References DataSet< DATA >::num(), DataSet< DATA >::number(), and DataSet< DATA >::remove().

◆ remove() [4/7]

template<class DATA >
void remove ( const int * nums,
int n )

remove n elements with numbers nums.

Definition at line 346 of file dataset.h.

References DataArray< T >::get_ptr(), DataSet< DATA >::num(), DataSet< DATA >::number(), and DataSet< DATA >::remove().

◆ remove() [5/7]

template<class DATA >
void remove ( const int * nums,
int n,
int * perm )

remove n elements given by nums and perm.

Definition at line 333 of file dataset.h.

References DataSet< DATA >::num(), DataSet< DATA >::number(), and DataSet< DATA >::remove().

◆ remove() [6/7]

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

remove multiple elements.

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

Definition at line 277 of file dataset.h.

References DataSet< DATA >::firstfree, DataKey::idx, DataSet< DATA >::Item::info, DataSet< DATA >::num(), DataSet< DATA >::number(), DataSet< DATA >::theitem, DataSet< DATA >::thekey, and DataSet< DATA >::thenum.

◆ remove() [7/7]

◆ size()

template<class DATA >
int size ( ) const

Member Data Documentation

◆ firstfree

◆ theitem

◆ thekey

◆ themax

◆ thenum

◆ thesize