59 void store_sizes (
unsigned int nbgroups,
unsigned int nbclasses,
unsigned int** classSizes) {
62 for(
unsigned int i = 0; i < nbgroups; ++i)
delete []
_sizes[i];
66 _sizes =
new unsigned int * [nbgroups];
68 for(
unsigned int i = 0; i < nbgroups; ++i) {
69 _sizes[i] =
new unsigned int [nbclasses];
70 for(
unsigned int j = 0; j < nbclasses; ++j)
71 _sizes[i][j] = classSizes[i][j];
75 bool sizeChange (
unsigned int nbgroups,
unsigned int nbclasses,
unsigned int** classSizes) {
79 for (
unsigned int i = 0; i <
_groups; i++)
80 for (
unsigned int j = 0; j <
_classes; j++)
81 status |=
_sizes[i][j] != classSizes[i][j];
94 DataTable(
unsigned int nbgroups,
unsigned int nbclasses,
unsigned int** classSizes) :
96 {
allocate(nbgroups, nbclasses, classSizes); }
105 inline void allocate (
unsigned int nbgroups,
unsigned int nbclasses,
unsigned int** classSizes) {
120 for(
unsigned int i = 0; i <
_groups; i++){
123 for(
unsigned int j = 1; j <
_classes; ++j)
130 for(
unsigned int i = 1; i <
_groups; i++){
132 for(
unsigned int j = 0; j <
_classes; ++j) {
138 for(
unsigned int j = 0; j <
_classes; ++j)
152 inline void update(
unsigned int nbgroups,
unsigned int nbclasses,
unsigned int** classSizes) {
158 allocate(nbgroups, nbclasses, classSizes);
160 else if (
sizeChange(nbgroups, nbclasses, classSizes) ) {
164 for(
unsigned int i = 0; i <
_groups; i++){
165 for(
unsigned int j = 1; j <
_classes; ++j)
170 for(
unsigned int i = 1; i <
_groups; i++){
172 for(
unsigned int j = 0; j <
_classes; ++j) {
178 for(
unsigned int j = 0; j <
_classes; ++j)
198 for(
unsigned int i = 0; i <
_groups; ++i) {
205 for(
unsigned int i = 0; i <
_groups; ++i)
delete []
_sizes[i];
226 inline T
get (
unsigned int group,
unsigned int Class,
unsigned int elmnt) {
230 inline void set (
unsigned int group,
unsigned int Class,
unsigned int elmnt, T val) {
234 inline void increment (
unsigned int group,
unsigned int Class,
unsigned int elmnt) {
238 inline void plus (
unsigned int group,
unsigned int Class,
unsigned int elmnt, T val) {
242 inline void minus (
unsigned int group,
unsigned int Class,
unsigned int elmnt, T val) {
246 inline void multiply (
unsigned int group,
unsigned int Class,
unsigned int elmnt, T val) {
250 inline void divide (
unsigned int group,
unsigned int Class,
unsigned int elmnt, T val) {
258 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:35
void show_up()
Definition: datatable.h:260
DataTable(unsigned int nbgroups, unsigned int nbclasses, unsigned int **classSizes)
Constructor.
Definition: datatable.h:94
T * getGroup(unsigned int group)
Accessor to a group array.
Definition: datatable.h:221
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:242
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:105
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:230
bool sizeChange(unsigned int nbgroups, unsigned int nbclasses, unsigned int **classSizes)
Definition: datatable.h:75
unsigned int size(unsigned int i, unsigned int j)
Definition: datatable.h:258
~DataTable()
Definition: datatable.h:98
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:250
unsigned int getNumClasses()
Definition: datatable.h:257
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:238
void store_sizes(unsigned int nbgroups, unsigned int nbclasses, unsigned int **classSizes)
Definition: datatable.h:59
void free()
Deallocates all the allocated tables.
Definition: datatable.h:187
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:226
unsigned int * _cumulGroupSizes
Stores the indexes of each group present in the table.
Definition: datatable.h:53
unsigned int getNumGroups()
Definition: datatable.h:256
unsigned int ** _sizes
Definition: datatable.h:55
T * _table
Definition: datatable.h:57
T * getClassWithinGroup(unsigned int group, unsigned int Class)
Accessor to a class array whithin a group.
Definition: datatable.h:223
DataTable()
Default constructor.
Definition: datatable.h:88
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:152
void init(T val)
Sets all elements of the table to value 'val'.
Definition: datatable.h:254
unsigned int _length
length of the table
Definition: datatable.h:39
unsigned int _groups
number of groups in the table
Definition: datatable.h:41
unsigned int length()
Returns the length of the table (total number of elements present).
Definition: datatable.h:217
T * getTable()
Accessor to the table array.
Definition: datatable.h:219
unsigned int ** _cumulClassSizes
Stores the indexes of each class of each group present in the table.
Definition: datatable.h:48
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:246
unsigned int _classes
number of classes within each group
Definition: datatable.h:43
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:234
void message(const char *message,...)
Definition: output.cc:38