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(). More...
#include <dataset.h>
Classes | |
struct | Item |
Public Member Functions | |
Extension | |
void | add (DataKey &newkey, const DATA &item) |
adds an element. More... | |
void | add (const DATA &item) |
adds element item . More... | |
void | add (DataKey newkey[], const DATA *item, int n) |
add several items. More... | |
void | add (const DATA *items, int n) |
adds n elements from items . More... | |
void | add (DataKey newkey[], const DataSet< DATA > &set) |
adds several new items. More... | |
void | add (const DataSet< DATA > &set) |
adds all elements of set . More... | |
DATA * | create (DataKey &newkey) |
creates new data element in DataSet. More... | |
DATA * | create () |
creates new (uninitialized) data element in DataSet. More... | |
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 | |
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 | |
DATA & | operator[] (int n) |
const DATA & | operator[] (int n) const |
returns element number n . More... | |
DATA & | operator[] (const DataKey &k) |
const DATA & | operator[] (const DataKey &k) const |
returns element with DataKey k . More... | |
Inquiry | |
int | max () const |
returns maximum number of elements that would fit into DataSet. More... | |
int | num () const |
returns number of elements currently in DataSet. More... | |
int | size () const |
returns the maximum DataKey::idx currently in DataSet. More... | |
DataKey | key (int n) const |
returns DataKey of n 'th element in DataSet. More... | |
DataKey | key (const DATA *item) const |
returns DataKey of element item in DataSet. More... | |
int | number (const DataKey &k) const |
returns the number of the element with DataKey k in DataSet or -1, if it doesn't exist. More... | |
int | number (const DATA *item) const |
returns the number of element item in DataSet, throws exception if it doesn't exist. More... | |
bool | has (const DataKey &k) const |
Is k a valid DataKey of an element in DataSet? More... | |
bool | has (int n) const |
Is n a valid number of an element in DataSet? More... | |
bool | has (const DATA *item) const |
Does item belong to DataSet? More... | |
Miscellaneous | |
ptrdiff_t | reMax (int newmax=0) |
resets max() to newmax . More... | |
bool | isConsistent () const |
consistency check. More... | |
Constructors / Destructors | |
DataSet (int pmax=8) | |
default constructor. More... | |
DataSet (const DataSet &old) | |
copy constructor. More... | |
DataSet< DATA > & | operator= (const DataSet< DATA > &rhs) |
assignment operator. More... | |
~DataSet () | |
destructor. More... | |
Protected Attributes | |
Types | |
struct soplex::DataSet::Item * | theitem |
array of elements in the DataSet More... | |
Data | |
DataKey * | thekey |
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 DataSet More... | |
int | firstfree |
first unused element in theitem More... | |
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:
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.
void add | ( | DataKey & | newkey, |
const DATA & | item | ||
) |
void add | ( | const DATA & | item | ) |
void add | ( | DataKey | newkey[], |
const DATA * | item, | ||
int | n | ||
) |
void add | ( | const DATA * | items, |
int | n | ||
) |
void add | ( | const DataSet< DATA > & | set | ) |
void clear | ( | ) |
remove all elements.
Definition at line 344 of file dataset.h.
Referenced by DataSet< int >::operator=().
DATA* create | ( | DataKey & | newkey | ) |
DATA* create | ( | ) |
creates new (uninitialized) data element in DataSet.
Definition at line 208 of file dataset.h.
Referenced by DataSet< int >::add(), and DataSet< int >::create().
bool has | ( | const DataKey & | k | ) | const |
Is k
a valid DataKey of an element in DataSet?
Definition at line 446 of file dataset.h.
Referenced by DataSet< int >::remove().
bool has | ( | int | n | ) | const |
bool has | ( | const DATA * | item | ) | const |
bool isConsistent | ( | ) | const |
consistency check.
Definition at line 507 of file dataset.h.
Referenced by DataSet< int >::DataSet(), and DataSet< int >::operator=().
DataKey key | ( | int | n | ) | const |
DataKey key | ( | const DATA * | item | ) | const |
int max | ( | ) | const |
returns maximum number of elements that would fit into DataSet.
Definition at line 391 of file dataset.h.
Referenced by DataSet< int >::add(), DataSet< int >::create(), and DataSet< int >::operator=().
int num | ( | ) | const |
returns number of elements currently in DataSet.
Definition at line 397 of file dataset.h.
Referenced by DataSet< int >::add(), DataSet< int >::create(), DataSet< int >::has(), DataSet< int >::key(), DataSet< int >::operator=(), and DataSet< int >::remove().
int number | ( | const DataKey & | k | ) | const |
returns the number of the element with DataKey k
in DataSet or -1, if it doesn't exist.
Definition at line 424 of file dataset.h.
Referenced by DataSet< int >::has(), DataSet< int >::key(), and DataSet< int >::remove().
int number | ( | const DATA * | item | ) | const |
const DATA& operator[] | ( | int | n | ) | const |
const DATA& operator[] | ( | const DataKey & | k | ) | const |
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 486 of file dataset.h.
Referenced by DataSet< int >::operator=().
void remove | ( | int | removenum | ) |
void remove | ( | const DataKey & | removekey | ) |
void remove | ( | int | perm[] | ) |
void remove | ( | const DataKey * | keys, |
int | n, | ||
int * | perm | ||
) |
void remove | ( | const DataKey * | keys, |
int | n | ||
) |
void remove | ( | const int * | nums, |
int | n, | ||
int * | perm | ||
) |
void remove | ( | const int * | nums, |
int | n | ||
) |
int size | ( | ) | const |
returns the maximum DataKey::idx currently in DataSet.
Definition at line 403 of file dataset.h.
Referenced by DataSet< int >::number(), DataSet< int >::operator=(), and DataSet< int >::reMax().
|
protected |
first unused element in theitem
Definition at line 112 of file dataset.h.
Referenced by DataSet< int >::DataSet(), DataSet< int >::operator=(), DataSet< int >::reMax(), and DataSet< int >::remove().
|
protected |
array of elements in the DataSet
Referenced by DataSet< int >::create(), DataSet< int >::DataSet(), DataSet< int >::has(), DataSet< int >::isConsistent(), DataSet< int >::number(), DataSet< int >::operator=(), DataSet< int >::operator[](), DataSet< int >::reMax(), DataSet< int >::remove(), and DataSet< int >::~DataSet().
|
protected |
DataKey::idx's of elements.
Definition at line 108 of file dataset.h.
Referenced by DataSet< int >::DataSet(), and DataSet< int >::operator=().
|
protected |
length of arrays theitem and thekey
Definition at line 109 of file dataset.h.
Referenced by DataSet< int >::DataSet(), DataSet< int >::max(), and DataSet< int >::operator=().
|
protected |
number of elements in DataSet
Definition at line 111 of file dataset.h.
Referenced by DataSet< int >::create(), DataSet< int >::isConsistent(), DataSet< int >::num(), DataSet< int >::operator=(), and DataSet< int >::remove().
|
protected |
highest used element in theitem
Definition at line 110 of file dataset.h.
Referenced by DataSet< int >::operator=(), DataSet< int >::remove(), and DataSet< int >::size().