X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2FW1Store.cc;h=80dde72388e325635b26abfda9455bf19d96ebea;hb=a7a92143366369dfba0d87570a589728b786574d;hp=23adbb02da5b57d9769da7f88c2f7ccd46bd7038;hpb=d7ead1c059ca51e1d71e0f3928f41733d4c7f29c;p=lib1wire.git diff --git a/src/W1Store.cc b/src/W1Store.cc index 23adbb0..80dde72 100644 --- a/src/W1Store.cc +++ b/src/W1Store.cc @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -150,6 +151,51 @@ void W1Store::load() { } } +Data *W1Store::get_sum() { + int row_count; + int col_count; + double new_val; + int ii; + int jj; + Date *date; + Data *data; + Data *ret_val; + + 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); + } + } + ret_val->set_date(data->get_date()); + if (data != NULL) { + delete(data); + } + } + } + return ret_val; +} + Data *W1Store::get_delta() { int row_count; int col_count; @@ -185,13 +231,39 @@ Data *W1Store::get_delta() { Data *W1Store::get_mean() { int row_count; int col_count; - double avg; + 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 *W1Store::get_max() { + int row_count; + int col_count; double new_val; int ii; int jj; Date *date; Data *data; Data *ret_val; + double min_val; ret_val = NULL; data = NULL; @@ -204,23 +276,69 @@ Data *W1Store::get_mean() { 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); + min_val = numeric_limits::min(); + ret_val = new Data(col_count, min_val); 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; + 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; } - //log_debug("new val: %f, sum: %f\n", new_val, sum); } - 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]); + } + ret_val->set_date(data->get_date()); + if (data != NULL) { + delete(data); + } + } + } + return ret_val; +} + +Data *W1Store::get_min() { + int row_count; + int col_count; + double new_val; + int ii; + int jj; + Date *date; + Data *data; + Data *ret_val; + double max_val; + + 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::max(); + ret_val = new Data(col_count, max_val); + 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; + } } } ret_val->set_date(data->get_date());