60 void store_sizes (
unsigned int nbgroups,
unsigned int nbclasses,
unsigned int** classSizes) {
63 for(
unsigned int i = 0; i < nbgroups; ++i)
delete []
_sizes[i];
67 _sizes =
new unsigned int * [nbgroups];
69 for(
unsigned int i = 0; i < nbgroups; ++i) {
70 _sizes[i] =
new unsigned int [nbclasses];
71 for(
unsigned int j = 0; j < nbclasses; ++j)
72 _sizes[i][j] = classSizes[i][j];
76 bool sizeChange (
unsigned int nbgroups,
unsigned int nbclasses,
unsigned int** classSizes) {
80 for (
unsigned int i = 0; i <
_groups; i++)
81 for (
unsigned int j = 0; j <
_classes; j++)
82 status |=
_sizes[i][j] != classSizes[i][j];
95 DataTable(
unsigned int nbgroups,
unsigned int nbclasses,
unsigned int** classSizes) :
97 {
allocate(nbgroups, nbclasses, classSizes); }
106 inline void allocate (
unsigned int nbgroups,
unsigned int nbclasses,
unsigned int** classSizes) {
121 for(
unsigned int i = 0; i <
_groups; i++){
124 for(
unsigned int j = 1; j <
_classes; ++j)
131 for(
unsigned int i = 1; i <
_groups; i++){
133 for(
unsigned int j = 0; j <
_classes; ++j) {
139 for(
unsigned int j = 0; j <
_classes; ++j)
153 inline void update(
unsigned int nbgroups,
unsigned int nbclasses,
unsigned int** classSizes) {
159 allocate(nbgroups, nbclasses, classSizes);
161 else if (
sizeChange(nbgroups, nbclasses, classSizes) ) {
165 for(
unsigned int i = 0; i <
_groups; i++){
166 for(
unsigned int j = 1; j <
_classes; ++j)
171 for(
unsigned int i = 1; i <
_groups; i++){
173 for(
unsigned int j = 0; j <
_classes; ++j) {
179 for(
unsigned int j = 0; j <
_classes; ++j)
199 for(
unsigned int i = 0; i <
_groups; ++i) {
206 for(
unsigned int i = 0; i <
_groups; ++i)
delete []
_sizes[i];
227 inline T
get (
unsigned int group,
unsigned int Class,
unsigned int elmnt) {
231 inline void set (
unsigned int group,
unsigned int Class,
unsigned int elmnt, T val) {
235 inline void increment (
unsigned int group,
unsigned int Class,
unsigned int elmnt) {
239 inline void plus (
unsigned int group,
unsigned int Class,
unsigned int elmnt, T val) {
243 inline void minus (
unsigned int group,
unsigned int Class,
unsigned int elmnt, T val) {
247 inline void multiply (
unsigned int group,
unsigned int Class,
unsigned int elmnt, T val) {
251 inline void divide (
unsigned int group,
unsigned int Class,
unsigned int elmnt, T val) {
259 unsigned int size (
unsigned int i,
unsigned int j) {
return _sizes[i][j];}
A class to aggregate structured data in an array.
Definition: datatable.h:36
void show_up()
Definition: datatable.h:261
DataTable(unsigned int nbgroups, unsigned int nbclasses, unsigned int **classSizes)
Constructor.
Definition: datatable.h:95
T * getGroup(unsigned int group)
Accessor to a group array.
Definition: datatable.h:222
void minus(unsigned int group, unsigned int Class, unsigned int elmnt, T val)
Substracts 'val' from 'elmnt' in the class 'Class' in the group 'group'.
Definition: datatable.h:243
void allocate(unsigned int nbgroups, unsigned int nbclasses, unsigned int **classSizes)
Creates a table of size given by the sum of all classes passed by the 'classSizes' matrix.
Definition: datatable.h:106
void set(unsigned int group, unsigned int Class, unsigned int elmnt, T val)
Sets the element 'elmnt' of the class 'Class' in the group 'group' to the value 'val'.
Definition: datatable.h:231
bool sizeChange(unsigned int nbgroups, unsigned int nbclasses, unsigned int **classSizes)
Definition: datatable.h:76
unsigned int size(unsigned int i, unsigned int j)
Definition: datatable.h:259
~DataTable()
Definition: datatable.h:99
void divide(unsigned int group, unsigned int Class, unsigned int elmnt, T val)
Subdivide 'elmnt' of the class 'Class' in the group 'group' by 'val'.
Definition: datatable.h:251
unsigned int getNumClasses()
Definition: datatable.h:258
void plus(unsigned int group, unsigned int Class, unsigned int elmnt, T val)
Adds 'val' to 'elmnt' in the class 'Class' in the group 'group'.
Definition: datatable.h:239
void store_sizes(unsigned int nbgroups, unsigned int nbclasses, unsigned int **classSizes)
Definition: datatable.h:60
void free()
Deallocates all the allocated tables.
Definition: datatable.h:188
T get(unsigned int group, unsigned int Class, unsigned int elmnt)
Returns value stored of the element 'elmnt' of the class 'Class' in the group 'group'.
Definition: datatable.h:227
unsigned int * _cumulGroupSizes
Stores the indexes of each group present in the table.
Definition: datatable.h:54
unsigned int getNumGroups()
Definition: datatable.h:257
unsigned int ** _sizes
Definition: datatable.h:56
T * _table
Definition: datatable.h:58
T * getClassWithinGroup(unsigned int group, unsigned int Class)
Accessor to a class array whithin a group.
Definition: datatable.h:224
DataTable()
Default constructor.
Definition: datatable.h:89
void update(unsigned int nbgroups, unsigned int nbclasses, unsigned int **classSizes)
Updates the group and classe sizes and re-allocates the table according to its new length.
Definition: datatable.h:153
void init(T val)
Sets all elements of the table to value 'val'.
Definition: datatable.h:255
unsigned int _length
length of the table
Definition: datatable.h:40
unsigned int _groups
number of groups in the table
Definition: datatable.h:42
unsigned int length()
Returns the length of the table (total number of elements present).
Definition: datatable.h:218
T * getTable()
Accessor to the table array.
Definition: datatable.h:220
unsigned int ** _cumulClassSizes
Stores the indexes of each class of each group present in the table.
Definition: datatable.h:49
void multiply(unsigned int group, unsigned int Class, unsigned int elmnt, T val)
Multiplies 'elmnt' of the class 'Class' in the group 'group' by 'val'.
Definition: datatable.h:247
unsigned int _classes
number of classes within each group
Definition: datatable.h:44
void increment(unsigned int group, unsigned int Class, unsigned int elmnt)
Increments 'elmnt' of the class 'Class' in the group 'group' by one.
Definition: datatable.h:235
void message(const char *message,...)
Definition: output.cc:39