Nemo  2.3.56
Simulate forward-in-time genetic evolution in a spatially explicit, individual-based stochastic simulator
DataTable< T > Class Template Reference

A class to aggregate structured data in an array. More...

#include <datatable.h>

+ Collaboration diagram for DataTable< T >:

Public Member Functions

 DataTable ()
 Default constructor. More...
 
 DataTable (unsigned int nbgroups, unsigned int nbclasses, unsigned int **classSizes)
 Constructor. More...
 
 ~DataTable ()
 
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. More...
 
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. More...
 
void free ()
 Deallocates all the allocated tables. More...
 
unsigned int length ()
 Returns the length of the table (total number of elements present). More...
 
T * getTable ()
 Accessor to the table array. More...
 
T * getGroup (unsigned int group)
 Accessor to a group array. More...
 
T * getClassWithinGroup (unsigned int group, unsigned int Class)
 Accessor to a class array whithin a group. More...
 
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'. More...
 
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'. More...
 
void increment (unsigned int group, unsigned int Class, unsigned int elmnt)
 Increments 'elmnt' of the class 'Class' in the group 'group' by one. More...
 
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'. More...
 
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'. More...
 
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'. More...
 
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'. More...
 
void init (T val)
 Sets all elements of the table to value 'val'. More...
 
unsigned int getNumGroups ()
 
unsigned int getNumClasses ()
 
unsigned int size (unsigned int i, unsigned int j)
 
void show_up ()
 

Private Member Functions

void store_sizes (unsigned int nbgroups, unsigned int nbclasses, unsigned int **classSizes)
 
bool sizeChange (unsigned int nbgroups, unsigned int nbclasses, unsigned int **classSizes)
 

Private Attributes

unsigned int _length
 length of the table More...
 
unsigned int _groups
 number of groups in the table More...
 
unsigned int _classes
 number of classes within each group More...
 
unsigned int ** _cumulClassSizes
 Stores the indexes of each class of each group present in the table. More...
 
unsigned int_cumulGroupSizes
 Stores the indexes of each group present in the table. More...
 
unsigned int ** _sizes
 
T * _table
 

Detailed Description

template<class T>
class DataTable< T >

A class to aggregate structured data in an array.

The information is subdivided into groups (e.g., patch) themselves structured in classes (e.g., age or sex classes).

Constructor & Destructor Documentation

◆ DataTable() [1/2]

template<class T >
DataTable< T >::DataTable ( )
inline

Default constructor.

unsigned int * _cumulGroupSizes
Stores the indexes of each group present in the table.
Definition: datatable.h:55
unsigned int ** _sizes
Definition: datatable.h:57
T * _table
Definition: datatable.h:59
unsigned int _length
length of the table
Definition: datatable.h:41
unsigned int _groups
number of groups in the table
Definition: datatable.h:43
unsigned int ** _cumulClassSizes
Stores the indexes of each class of each group present in the table.
Definition: datatable.h:50
unsigned int _classes
number of classes within each group
Definition: datatable.h:45

◆ DataTable() [2/2]

template<class T >
DataTable< T >::DataTable ( unsigned int  nbgroups,
unsigned int  nbclasses,
unsigned int **  classSizes 
)
inline

Constructor.

Parameters
nbgroupsthe number of rows in the table, typically the number of patches
nbclassesan array of the sizes of each row, i.e. the Patch sizes
classSizesa matrix of the sizes of each class within each group
96 :
98 { allocate(nbgroups, nbclasses, classSizes); }
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:107

References DataTable< T >::allocate().

◆ ~DataTable()

template<class T >
DataTable< T >::~DataTable ( )
inline
100{free();}
void free()
Deallocates all the allocated tables.
Definition: datatable.h:189

References DataTable< T >::free().

Member Function Documentation

◆ allocate()

template<class T >
void DataTable< T >::allocate ( unsigned int  nbgroups,
unsigned int  nbclasses,
unsigned int **  classSizes 
)
inline

Creates a table of size given by the sum of all classes passed by the 'classSizes' matrix.

Parameters
nbgroupsthe number of rows in the table, typically the number of patches
nbclassesthe number of classes within a group, e.g. the age-classes
classSizesa matrix (nbgroups X nbclasses) of the sizes of each class within each group
107 {
108 //#ifdef _DEBUG_
109 // message("DataTable::allocate:\n");
110 //#endif
111
112 free();
113
114 store_sizes(nbgroups, nbclasses, classSizes);
115
116 _groups = nbgroups;
117 _classes = nbclasses;
118 _length = 0;
119
120 _cumulClassSizes = new unsigned int*[_groups];
121
122 for(unsigned int i = 0; i < _groups; i++){
123 _cumulClassSizes[i] = new unsigned int [_classes];
124 _cumulClassSizes[i][0] = 0;
125 for(unsigned int j = 1; j < _classes; ++j)
126 _cumulClassSizes[i][j] = _cumulClassSizes[i][j-1] + classSizes[i][j-1];
127 }
128
129 _cumulGroupSizes = new unsigned int[_groups];
130
131 _cumulGroupSizes[0] = 0;
132 for(unsigned int i = 1; i < _groups; i++){
134 for(unsigned int j = 0; j < _classes; ++j) {
135 _cumulGroupSizes[i] += classSizes[(i-1)][j];//total size of the previous group
136 _length += classSizes[i][j];//aggregate to compute total length
137 }
138 }
139 //add the sizes of first group classes to have the total length of the table
140 for(unsigned int j = 0; j < _classes; ++j)
141 _length += classSizes[0][j];
142
143 _table = new T[_length];
144 //#ifdef _DEBUG_
145// cout<<"DataTable::allocate:_table="<<_table<<endl;
146 //#endif
147 }
void store_sizes(unsigned int nbgroups, unsigned int nbclasses, unsigned int **classSizes)
Definition: datatable.h:61

References DataTable< T >::_classes, DataTable< T >::_cumulClassSizes, DataTable< T >::_cumulGroupSizes, DataTable< T >::_groups, DataTable< T >::_length, DataTable< T >::_table, DataTable< T >::free(), and DataTable< T >::store_sizes().

Referenced by TTNeutralGenesSH::allocateTables(), DataTable< T >::DataTable(), and DataTable< T >::update().

+ Here is the caller graph for this function:

◆ divide()

template<class T >
void DataTable< T >::divide ( unsigned int  group,
unsigned int  Class,
unsigned int  elmnt,
val 
)
inline

Subdivide 'elmnt' of the class 'Class' in the group 'group' by 'val'.

252 {
253 _table[ _cumulGroupSizes[group] + _cumulClassSizes[group][Class] + elmnt ] /= val;
254 }

References DataTable< T >::_cumulClassSizes, DataTable< T >::_cumulGroupSizes, and DataTable< T >::_table.

Referenced by TTNeutralGenesSH::setHeterozygosity().

+ Here is the caller graph for this function:

◆ free()

template<class T >
void DataTable< T >::free ( )
inline

Deallocates all the allocated tables.

189 {
190// cout << "\ncalling DataTable::free()\n";
191// cout << " pointer state: table="<<_table<<" cumulGroupSizes="<<_cumulGroupSizes
192// <<"\n cumulClassSizes="<<_cumulClassSizes<<" sizes="<<_sizes
193// <<endl;
194
195 if(_table != NULL) delete [] _table;
196
197 if(_cumulGroupSizes != NULL) delete [] _cumulGroupSizes;
198// cout << " delete _cumulClassSizes\n";
199 if(_cumulClassSizes != NULL){
200 for(unsigned int i = 0; i < _groups; ++i) {
201// cout << " "<<i<<":"<<_cumulClassSizes[i]<<endl;
202 delete [] _cumulClassSizes[i];}
203 delete [] _cumulClassSizes;
204 }
205// cout << " delete _sizes\n";
206 if(_sizes != NULL){
207 for(unsigned int i = 0; i < _groups; ++i) delete [] _sizes[i];
208 delete [] _sizes;
209 }
210
211 _table = NULL;
212 _cumulGroupSizes = NULL;
213 _cumulClassSizes = NULL;
214 _sizes = NULL;
215 _length = 0;
216// cout << "DataTable::free() done\n";
217}

References DataTable< T >::_cumulClassSizes, DataTable< T >::_cumulGroupSizes, DataTable< T >::_groups, DataTable< T >::_length, DataTable< T >::_sizes, and DataTable< T >::_table.

Referenced by DataTable< T >::allocate(), and DataTable< T >::~DataTable().

+ Here is the caller graph for this function:

◆ get()

template<class T >
T DataTable< T >::get ( unsigned int  group,
unsigned int  Class,
unsigned int  elmnt 
)
inline

◆ getClassWithinGroup()

template<class T >
T * DataTable< T >::getClassWithinGroup ( unsigned int  group,
unsigned int  Class 
)
inline

Accessor to a class array whithin a group.

225 {
226 return &_table[ _cumulGroupSizes[group] + _cumulClassSizes[group][Class] ];}

References DataTable< T >::_cumulClassSizes, DataTable< T >::_cumulGroupSizes, and DataTable< T >::_table.

Referenced by TTQuantiSH::getSkewPerPatch(), and TTQuantiSH::setStats().

+ Here is the caller graph for this function:

◆ getGroup()

template<class T >
T * DataTable< T >::getGroup ( unsigned int  group)
inline

Accessor to a group array.

223{return &_table[ _cumulGroupSizes[group] ];}

References DataTable< T >::_cumulGroupSizes, and DataTable< T >::_table.

Referenced by TTQuantiSH::setStats().

+ Here is the caller graph for this function:

◆ getNumClasses()

template<class T >
unsigned int DataTable< T >::getNumClasses ( )
inline
259{return _classes;}

References DataTable< T >::_classes.

◆ getNumGroups()

template<class T >
unsigned int DataTable< T >::getNumGroups ( )
inline

◆ getTable()

template<class T >
T * DataTable< T >::getTable ( )
inline

Accessor to the table array.

221{return _table;}

References DataTable< T >::_table.

◆ increment()

template<class T >
void DataTable< T >::increment ( unsigned int  group,
unsigned int  Class,
unsigned int  elmnt 
)
inline

Increments 'elmnt' of the class 'Class' in the group 'group' by one.

236 {
237 ++_table[ _cumulGroupSizes[group] + _cumulClassSizes[group][Class] + elmnt ];
238 }

References DataTable< T >::_cumulClassSizes, DataTable< T >::_cumulGroupSizes, and DataTable< T >::_table.

Referenced by TTNeutralGenesSH::setAlleleTables().

+ Here is the caller graph for this function:

◆ init()

template<class T >
void DataTable< T >::init ( val)
inline

Sets all elements of the table to value 'val'.

256{for(unsigned int i = 0; i < _length; ++i) _table[i] = val;}

References DataTable< T >::_length, and DataTable< T >::_table.

Referenced by TTNeutralGenesSH::setAlleleTables(), and TTNeutralGenesSH::setHeteroTable().

+ Here is the caller graph for this function:

◆ length()

template<class T >
unsigned int DataTable< T >::length ( )
inline

Returns the length of the table (total number of elements present).

219{return _length;}

References DataTable< T >::_length.

◆ minus()

template<class T >
void DataTable< T >::minus ( unsigned int  group,
unsigned int  Class,
unsigned int  elmnt,
val 
)
inline

Substracts 'val' from 'elmnt' in the class 'Class' in the group 'group'.

244 {
245 _table[ _cumulGroupSizes[group] + _cumulClassSizes[group][Class] + elmnt ] -= val;
246 }

References DataTable< T >::_cumulClassSizes, DataTable< T >::_cumulGroupSizes, and DataTable< T >::_table.

◆ multiply()

template<class T >
void DataTable< T >::multiply ( unsigned int  group,
unsigned int  Class,
unsigned int  elmnt,
val 
)
inline

Multiplies 'elmnt' of the class 'Class' in the group 'group' by 'val'.

248 {
249 _table[ _cumulGroupSizes[group] + _cumulClassSizes[group][Class] + elmnt ] *= val;
250 }

References DataTable< T >::_cumulClassSizes, DataTable< T >::_cumulGroupSizes, and DataTable< T >::_table.

◆ plus()

template<class T >
void DataTable< T >::plus ( unsigned int  group,
unsigned int  Class,
unsigned int  elmnt,
val 
)
inline

Adds 'val' to 'elmnt' in the class 'Class' in the group 'group'.

240 {
241 _table[ _cumulGroupSizes[group] + _cumulClassSizes[group][Class] + elmnt ] += val;
242 }

References DataTable< T >::_cumulClassSizes, DataTable< T >::_cumulGroupSizes, and DataTable< T >::_table.

Referenced by TTNeutralGenesSH::setHeteroTable().

+ Here is the caller graph for this function:

◆ set()

template<class T >
void DataTable< T >::set ( unsigned int  group,
unsigned int  Class,
unsigned int  elmnt,
val 
)
inline

Sets the element 'elmnt' of the class 'Class' in the group 'group' to the value 'val'.

232 {
233 _table[ _cumulGroupSizes[group] + _cumulClassSizes[group][Class] + elmnt ] = val;
234 }

References DataTable< T >::_cumulClassSizes, DataTable< T >::_cumulGroupSizes, and DataTable< T >::_table.

Referenced by TTNeutralGenesSH::setAlleleTables(), and store_quanti_trait_values().

+ Here is the caller graph for this function:

◆ show_up()

template<class T >
void DataTable< T >::show_up ( )
inline
263 {
264 message("DataTable: got %i groups of %i classes; total length is %i.\n", _groups, _classes, _length);
265 }
void message(const char *message,...)
Definition: output.cc:40

References DataTable< T >::_classes, DataTable< T >::_groups, DataTable< T >::_length, and message().

◆ size()

template<class T >
unsigned int DataTable< T >::size ( unsigned int  i,
unsigned int  j 
)
inline
260{return _sizes[i][j];}

References DataTable< T >::_sizes.

Referenced by TTQuantiSH::getSkewPerPatch(), and TTQuantiSH::setDataTables().

+ Here is the caller graph for this function:

◆ sizeChange()

template<class T >
bool DataTable< T >::sizeChange ( unsigned int  nbgroups,
unsigned int  nbclasses,
unsigned int **  classSizes 
)
inlineprivate
77 {
78 bool status = 0;
79 if( nbgroups != _groups || nbclasses != _classes ) return true;
80 else {
81 for (unsigned int i = 0; i < _groups; i++)
82 for (unsigned int j = 0; j < _classes; j++)
83 status |= _sizes[i][j] != classSizes[i][j];
84 }
85 return status;
86 }

References DataTable< T >::_classes, DataTable< T >::_groups, and DataTable< T >::_sizes.

Referenced by DataTable< T >::update().

+ Here is the caller graph for this function:

◆ store_sizes()

template<class T >
void DataTable< T >::store_sizes ( unsigned int  nbgroups,
unsigned int  nbclasses,
unsigned int **  classSizes 
)
inlineprivate
61 {
62
63 if (_sizes != NULL) {
64 for(unsigned int i = 0; i < nbgroups; ++i) delete [] _sizes[i];
65 delete [] _sizes;
66 }
67
68 _sizes = new unsigned int * [nbgroups];
69
70 for(unsigned int i = 0; i < nbgroups; ++i) {
71 _sizes[i] = new unsigned int [nbclasses];
72 for(unsigned int j = 0; j < nbclasses; ++j)
73 _sizes[i][j] = classSizes[i][j];
74 }
75 }

References DataTable< T >::_sizes.

Referenced by DataTable< T >::allocate(), and DataTable< T >::update().

+ Here is the caller graph for this function:

◆ update()

template<class T >
void DataTable< T >::update ( unsigned int  nbgroups,
unsigned int  nbclasses,
unsigned int **  classSizes 
)
inline

Updates the group and classe sizes and re-allocates the table according to its new length.

Parameters
nbgroupsthe number of rows in the table, typically the number of patches
nbclassesthe number of classes within a group, e.g. the age-class sizes
classSizesa matrix of the sizes of each class within each group
154 {
155 //#ifdef _DEBUG_
156 // message("DataTable::update:\n");
157 //#endif
158 if( nbgroups != _groups || nbclasses != _classes )
159
160 allocate(nbgroups, nbclasses, classSizes); //free() is called in allocate
161
162 else if ( sizeChange(nbgroups, nbclasses, classSizes) ) {
163
164 store_sizes(nbgroups, nbclasses, classSizes);
165
166 for(unsigned int i = 0; i < _groups; i++){
167 for(unsigned int j = 1; j < _classes; ++j)
168 _cumulClassSizes[i][j] = _cumulClassSizes[i][j-1] + classSizes[i][j-1];
169 }
170 _length = 0;
171 _cumulGroupSizes[0] = 0;
172 for(unsigned int i = 1; i < _groups; i++){
174 for(unsigned int j = 0; j < _classes; ++j) {
175 _cumulGroupSizes[i] += classSizes[(i-1)][j];
176 _length += classSizes[i][j];
177 }
178 }
179
180 for(unsigned int j = 0; j < _classes; ++j)
181 _length += classSizes[0][j];
182
183 if(_table != NULL) delete [] _table;
184
185 _table = new T[_length];
186 }
187 }
bool sizeChange(unsigned int nbgroups, unsigned int nbclasses, unsigned int **classSizes)
Definition: datatable.h:77

References DataTable< T >::_classes, DataTable< T >::_cumulClassSizes, DataTable< T >::_cumulGroupSizes, DataTable< T >::_groups, DataTable< T >::_length, DataTable< T >::_table, DataTable< T >::allocate(), DataTable< T >::sizeChange(), and DataTable< T >::store_sizes().

Referenced by TTQuantiSH::setDataTables(), and TTNeutralGenesSH::setHeteroTable().

+ Here is the caller graph for this function:

Member Data Documentation

◆ _classes

template<class T >
unsigned int DataTable< T >::_classes
private

◆ _cumulClassSizes

template<class T >
unsigned int** DataTable< T >::_cumulClassSizes
private

Stores the indexes of each class of each group present in the table.

the aggregated sizes of each classe within each group given by: size(class i!=0) = sum of size( (class 0) to (class i-1) ) and size(class i=0) = 0. This is repeated for each group.

Referenced by DataTable< T >::allocate(), DataTable< T >::divide(), DataTable< T >::free(), DataTable< T >::get(), DataTable< T >::getClassWithinGroup(), DataTable< T >::increment(), DataTable< T >::minus(), DataTable< T >::multiply(), DataTable< T >::plus(), DataTable< T >::set(), and DataTable< T >::update().

◆ _cumulGroupSizes

template<class T >
unsigned int* DataTable< T >::_cumulGroupSizes
private

Stores the indexes of each group present in the table.

the aggregated sizes of each group with size(group i=0) = 0 and size(group i!=0) = sum of size( (group 0) to (group i-1)) where the group sizes are the sum of the classe sizes of the groups.

Referenced by DataTable< T >::allocate(), DataTable< T >::divide(), DataTable< T >::free(), DataTable< T >::get(), DataTable< T >::getClassWithinGroup(), DataTable< T >::getGroup(), DataTable< T >::increment(), DataTable< T >::minus(), DataTable< T >::multiply(), DataTable< T >::plus(), DataTable< T >::set(), and DataTable< T >::update().

◆ _groups

template<class T >
unsigned int DataTable< T >::_groups
private

◆ _length

◆ _sizes

template<class T >
unsigned int** DataTable< T >::_sizes
private

◆ _table


The documentation for this class was generated from the following file:

Generated for Nemo v2.3.56 by  doxygen 1.9.0 -- Nemo is hosted on  Download Nemo

Locations of visitors to this page
Catalogued on GSR