- log_debug("opening file: %s\n", store_file_name.c_str());
- in.open(store_file_name.c_str());
- if (in.is_open() == true) {
- while (in.eof() == false) {
- getline(in, data_str);
- if (data_str.empty() == false) {
- data = Data::parse_string(data_str);
- if (data != NULL) {
- if (store_data == NULL) {
- store_data = new DataRange(data);
- }
- else {
- store_data->add_data(data);
- }
- delete(data);
- }
- }
- }
- ret_val = true;
- }
- else {
- log_error("Could not load data from file: %s\n", store_file_name.c_str());
- }
- return ret_val;
-}
-
-Data *Store::get_sum() {
- int row_count;
- int col_count;
- double new_val;
- int ii;
- int jj;
- Data *data;
- Data *ret_val;
- Date date;
-
- ret_val = NULL;
- data = NULL;
- if (store_data == NULL) {
- load();
- }
- if (store_data != NULL) {
- row_count = store_data->get_data_row_count();
- log_debug("data row count: %d\n", row_count);
- if (row_count > 0) {
- col_count = store_data->get_data_column_count();
- log_debug("data item count per row: %d\n", col_count);
- ret_val = new Data(col_count);
- if (col_count > 0) {
- for (ii = 0; ii < row_count - 1; ii++) {
- data = store_data->get_data(ii);
- for (jj = 0; jj < col_count; jj++) {
- new_val = data->value_arr[jj];
- ret_val->value_arr[jj] = ret_val->value_arr[jj] + new_val;
- }
- if (ii < (row_count - 2)) {
- delete(data);
- data = NULL;
- }
- //log_debug("new val: %f, sum: %f\n", new_val, sum);
- }
- }
- date = data->get_date();
- ret_val->set_date(&date);
- if (data != NULL) {
- delete(data);
- }
- }
- }
- return ret_val;
-}
-
-Data *Store::get_delta() {
- int row_count;
- int col_count;
- Data *o_data;
- Data *n_data;
- Data *ret_val;
- int ii;
- DataRange *dr;
- Date date;
-
- ret_val = NULL;
- dr = get_oldest_and_newest_data();
- if (dr != NULL) {
- row_count = dr->get_data_row_count();
- if (row_count == 2) {
- o_data = dr->get_data(0);
- n_data = dr->get_data(1);
- col_count = dr->get_data_column_count();
- ret_val = new Data(col_count);
- if (col_count > 0) {
- for (ii = 0; ii < col_count; ii++) {
- log_debug("old_data[%d]: %f new data: %f\n", ii, o_data->value_arr[ii], n_data->value_arr[ii]);
- ret_val->value_arr[ii] = n_data->value_arr[ii] - o_data->value_arr[ii];
- }
- }
- date = n_data->get_date();
- ret_val->set_date(&date);
- delete(o_data);
- delete(n_data);
- }
- delete(dr);
- }
- return ret_val;
-}
-
-Data *Store::get_mean() {
- int row_count;
- int col_count;
- int ii;
- Data *ret_val;
-
- ret_val = NULL;
- if (store_data == NULL) {
- load();
- }
- if (store_data != NULL) {
- row_count = store_data->get_data_row_count();
- if (row_count > 0) {
- col_count = store_data->get_data_column_count();
- ret_val = get_sum();
- if (col_count > 0) {
- for (ii = 0; ii < col_count; ii++) {
- ret_val->value_arr[ii] = ret_val->value_arr[ii] / row_count;
- log_debug("avg: %f\n", ret_val->value_arr[ii]);
- }
- }
- }
- }
- return ret_val;
-}
-
-Data *Store::get_max() {
- int row_count;
- int col_count;
- double new_val;
- int ii;
- int jj;
- Data *data;
- Data *ret_val;
- double min_val;
- Date date;
-
- ret_val = NULL;
- data = NULL;
- if (store_data == NULL) {
- load();
- }
- if (store_data != NULL) {
- row_count = store_data->get_data_row_count();
- log_debug("data row count: %d\n", row_count);
- if (row_count > 0) {
- col_count = store_data->get_data_column_count();
- log_debug("data item count per row: %d\n", col_count);
- min_val = numeric_limits<double>::min();
- data = store_data->get_data(0);
- ret_val = new Data(col_count,
- min_val,
- data->get_unit());
- if (col_count > 0) {
- for (ii = 0; ii < row_count - 1; ii++) {
- data = store_data->get_data(ii);
- for (jj = 0; jj < col_count; jj++) {
- new_val = data->value_arr[jj];
- if (new_val > ret_val->value_arr[jj]) {
- ret_val->value_arr[jj] = new_val;
- }
- }
- if (ii < (row_count - 2)) {
- delete(data);
- data = NULL;
- }
- }
- }
- date = data->get_date();
- ret_val->set_date(&date);
- if (data != NULL) {
- delete(data);
- }
- }
- }
- return ret_val;
-}
-
-Data *Store::get_min() {
- int row_count;
- int col_count;
- double new_val;
- int ii;
- int jj;
- Data *data;
- Data *ret_val;
- double max_val;
- Date date;
-
- ret_val = NULL;
- data = NULL;
- if (store_data == NULL) {
- load();
- }
- if (store_data != NULL) {
- row_count = store_data->get_data_row_count();
- log_debug("data row count: %d\n", row_count);
- if (row_count > 0) {
- col_count = store_data->get_data_column_count();
- log_debug("data item count per row: %d\n", col_count);
- max_val = numeric_limits<double>::max();
- data = store_data->get_data(0);
- ret_val = new Data(col_count,
- max_val,
- data->get_unit());
- if (col_count > 0) {
- for (ii = 0; ii < row_count - 1; ii++) {
- data = store_data->get_data(ii);
- for (jj = 0; jj < col_count; jj++) {
- new_val = data->value_arr[jj];
- if (new_val < ret_val->value_arr[jj]) {
- ret_val->value_arr[jj] = new_val;
- }
- }
- if (ii < (row_count - 2)) {
- delete(data);
- data = NULL;
- }
- }
- }
- date = data->get_date();
- ret_val->set_date(&date);
- if (data != NULL) {
- delete(data);
- }
- }
- }
- return ret_val;
-}
-
-vector<Data *> *Store::get_sum(int freq_sec) {
- int row_count;
- int col_count;
- int jj;
- int ii;
- Data *data;
- Data *calc;
- Date *limit_d;
- Date date;
- vector<Data *> *ret_val;
-
- ret_val = new vector<Data *>();
- calc = NULL;
- limit_d = NULL;
- if (store_data == NULL) {
- load();
- }
- if (store_data != NULL) {
- row_count = store_data->get_data_row_count();
- if (row_count > 0) {
- col_count = store_data->get_data_column_count();
- if (col_count > 0) {
- for (ii = 0; ii < row_count; ii++) {
- data = store_data->get_data(ii);
- if (data != NULL) {
- if (calc == NULL) {
- calc = data->clone();
- limit_d = data->get_date().clone();
- limit_d->min = 0;
- limit_d->sec = 0;
- limit_d->inc_seconds(freq_sec);
- }
- else {
- date = data->get_date();
- if (date.before(limit_d)) {
- for (jj = 0; jj < col_count; jj++) {
- calc->value_arr[jj] = calc->value_arr[jj] + data->value_arr[jj];
- }
- }
- else {
- ret_val->push_back(calc);
- calc = data->clone();
- if (limit_d != NULL) {
- delete(limit_d);
- }
- limit_d = data->get_date().clone();
- limit_d->min = 0;
- limit_d->sec = 0;
- limit_d->inc_seconds(freq_sec);
- }
- }
- delete(data);
- }
- }
- if (calc != NULL) {
- delete(calc);
- calc = NULL;
- }
- if (limit_d != NULL) {
- delete(limit_d);
- }
- }
- }
- }
- return ret_val;
-}
-
-vector<Data *> *Store::get_mean(int freq_sec) {
- int row_count;
- int col_count;
- int d_count;
- int jj;
- int ii;
- Data *data;
- Data *calc;
- Date *limit_d;
- Date date;
- vector<Data *> *ret_val;
-
- ret_val = new vector<Data *>();
- calc = NULL;
- limit_d = NULL;
- d_count = 1;
- if (store_data == NULL) {
- load();
- }
- if (store_data != NULL) {
- row_count = store_data->get_data_row_count();
- if (row_count > 0) {
- col_count = store_data->get_data_column_count();
- if (col_count > 0) {
- for (ii = 0; ii < row_count; ii++) {
- data = store_data->get_data(ii);
- if (data != NULL) {
- if (calc == NULL) {
- d_count = 1;
- calc = data->clone();
- limit_d = data->get_date().clone();
- limit_d->min = 0;
- limit_d->sec = 0;
- limit_d->inc_seconds(freq_sec);
- }
- else {
- date = data->get_date();
- if (date.before(limit_d)) {
- for (jj = 0; jj < col_count; jj++) {
- calc->value_arr[jj] = calc->value_arr[jj] + data->value_arr[jj];
- }
- d_count++;
- }
- else {
- for (jj = 0; jj < col_count; jj++) {
- calc->value_arr[jj] = calc->value_arr[jj] / d_count;
- }
- ret_val->push_back(calc);
- d_count = 1;
- calc = data->clone();
- if (limit_d != NULL) {
- delete(limit_d);
- }
- limit_d = data->get_date().clone();
- limit_d->min = 0;
- limit_d->sec = 0;
- limit_d->inc_seconds(freq_sec);
- }
- }
- delete(data);
- }
- }
- if (calc != NULL) {
- delete(calc);
- calc = NULL;
- }
- if (limit_d != NULL) {
- delete(limit_d);
- }
- }
- }
- }
- return ret_val;
-}
-
-vector<Data *> *Store::get_delta(int freq_sec) {
- int row_count;
- int col_count;
- int jj;
- int ii;
- Data *data;
- Data *calc1;
- Data *calc2;
- Date *limit_d;
- Date date;
- vector<Data *> *ret_val;
-
- ret_val = new vector<Data *>();
- calc1 = NULL;
- calc2 = NULL;
- limit_d = NULL;
- if (store_data == NULL) {
- load();
- }
- if (store_data != NULL) {
- row_count = store_data->get_data_row_count();
- if (row_count > 0) {
- col_count = store_data->get_data_column_count();
- if (col_count > 0) {
- for (ii = 0; ii < row_count; ii++) {
- data = store_data->get_data(ii);
- if (data != NULL) {
- if (calc1 == NULL) {
- calc1 = data->clone();
- limit_d = data->get_date().clone();
- limit_d->min = 0;
- limit_d->sec = 0;
- limit_d->inc_seconds(freq_sec);
- if (calc2 != NULL) {
- delete(calc2);
- }
- calc2 = NULL;
- }
- else {
- date = data->get_date();
- if (date.before(limit_d)) {
- if (calc2 != NULL) {
- delete(calc2);
- }
- calc2 = data->clone();
- }
- else {
- if (calc2 == NULL) {
- calc2 = calc1->clone();
- }
- for (jj = 0; jj < col_count; jj++) {
- calc2->value_arr[jj] = calc2->value_arr[jj] - calc1->value_arr[jj];
- }
- ret_val->push_back(calc2);
- delete(calc1);
- calc1 = data->clone();
- calc2 = NULL; // do not delete calc2 as it's stored to array
- if (limit_d != NULL) {
- delete(limit_d);
- }
- limit_d = data->get_date().clone();
- limit_d->min = 0;
- limit_d->sec = 0;
- limit_d->inc_seconds(freq_sec);
- }
- }
- delete(data);
- }
- }
- if (calc1 != NULL) {
- delete(calc1);
- calc1 = NULL;
- }
- if (calc2 != NULL) {
- delete(calc2);
- calc2 = NULL;
- }
- if (limit_d != NULL) {
- delete(limit_d);
- }
- }
- }
- }
- return ret_val;
-}
-
-vector<Data *> *Store::get_max_or_min(int freq_sec, bool max) {
- int row_count;
- int col_count;
- int jj;
- int ii;
- Data *data;
- Data *calc;
- Date *limit_d;
- Date date;
- vector<Data *> *ret_val;
-
- ret_val = new vector<Data *>();
- calc = NULL;
- limit_d = NULL;
- if (store_data == NULL) {
- load();
- }
- if (store_data != NULL) {
- row_count = store_data->get_data_row_count();
- if (row_count > 0) {
- col_count = store_data->get_data_column_count();
- if (col_count > 0) {
- for (ii = 0; ii < row_count; ii++) {
- data = store_data->get_data(ii);