7 #define ISOSPEC_INIT_TABLE_SIZE 1024 22 bool get_masses,
bool get_probs,
23 bool get_lprobs,
bool get_confs);
27 inline double* masses(
bool release =
false) {
double* ret = _masses;
if(release) _masses =
nullptr;
return ret; };
28 inline double* lprobs(
bool release =
false) {
double* ret = _lprobs;
if(release) _lprobs =
nullptr;
return ret; };
29 inline double* probs(
bool release =
false) {
double* ret = _probs;
if(release) _probs =
nullptr;
return ret; };
30 inline int* confs(
bool release =
false) {
int* ret = _confs;
if(release) _confs =
nullptr;
return ret; };
31 inline size_t confs_no() {
return _confs_no; };
34 inline void reallocate(
double **array,
int new_size){
35 if( *array !=
nullptr ){
36 *array = (
double *) realloc(*array, new_size);
41 bool get_masses,
bool get_probs,
42 bool get_lprobs,
bool get_confs )
44 size_t current_size = ISOSPEC_INIT_TABLE_SIZE;
45 int confs_tbl_idx = 0;
48 const int allDimSizeOfInt =
sizeof(int)*generator->getAllDim();
50 _masses = get_masses ? (
double *) malloc(ISOSPEC_INIT_TABLE_SIZE *
sizeof(
double)) :
nullptr;
51 _lprobs = get_lprobs ? (
double *) malloc(ISOSPEC_INIT_TABLE_SIZE *
sizeof(
double)) :
nullptr;
52 _probs = get_probs ? (
double *) malloc(ISOSPEC_INIT_TABLE_SIZE *
sizeof(
double)) :
nullptr;
53 _confs = get_confs ? (
int *) malloc(ISOSPEC_INIT_TABLE_SIZE * allDimSizeOfInt):
nullptr;
56 while(generator->advanceToNextConfiguration()){
57 if( _confs_no == current_size )
63 reallocate(&_masses, current_size *
sizeof(
double));
64 reallocate(&_lprobs, current_size *
sizeof(
double));
65 reallocate(&_probs, current_size *
sizeof(
double));
67 if( _confs !=
nullptr ){
68 _confs = (
int *) realloc(_confs, current_size * allDimSizeOfInt);
72 if(_masses !=
nullptr) _masses[_confs_no] = generator->mass();
74 if(_lprobs !=
nullptr) _lprobs[_confs_no] = generator->lprob();
76 if(_probs !=
nullptr) _probs[_confs_no] = generator->prob();
78 if(_confs !=
nullptr){
79 generator->get_conf_signature(_confs + confs_tbl_idx);
80 confs_tbl_idx += generator->getAllDim();
86 _masses = (
double *) realloc(_masses, _confs_no *
sizeof(
double));
87 _lprobs = (
double *) realloc(_lprobs, _confs_no *
sizeof(
double));
88 _probs = (
double *) realloc(_probs, _confs_no *
sizeof(
double));
89 _confs = (
int *) realloc(_confs, confs_tbl_idx *
sizeof(
int));
94 if( _masses !=
nullptr ) free(_masses);
95 if( _lprobs !=
nullptr ) free(_lprobs);
96 if( _probs !=
nullptr ) free(_probs);
97 if( _confs !=
nullptr ) free(_confs);