X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2FW1Store.cc;h=4f35376762bd72758a4f2a3d285b6d28ae859a16;hb=6dea0b59503a71874c4476c05044fff3c5ae26a5;hp=09ff70636538ab54fae2d998d7f1cffd9c0698c3;hpb=c4d8504b99fa1e354d15b2b91e4e2797f54ba028;p=lib1wire.git diff --git a/src/W1Store.cc b/src/W1Store.cc index 09ff706..4f35376 100644 --- a/src/W1Store.cc +++ b/src/W1Store.cc @@ -8,7 +8,6 @@ #include #include #include -#include #include #include @@ -74,45 +73,55 @@ string W1Store::get_file_name(string device_id, Date *date_time) { return ret_val; } -void W1Store::store(string device_id, - list *string_list) { - string f_path; - string line; - ofstream *ostream; - Date *date; - - date = new Date(); - f_path = get_file_name(device_id, date); - ostream = W1Util::open_for_writing(f_path.c_str()); +void W1Store::save(string device_id, + std::list *data_list) { + string n_path; + string f_path; + string line; + Data *data; + ofstream *ostream; + Date date; + list::iterator iter; + + ostream = NULL; + f_path = ""; + log_info("[%s] writing %d data values to save.\n", device_id.c_str(), data_list->size()); // TODO: add mutex to protect string_list while it's read and emptied - if (ostream != NULL) { - if (ostream->is_open()) { - log_info("[%s] writing %d data values to file: %s\n", device_id.c_str(), string_list->size(), f_path.c_str()); - while(string_list->size() > 0) { - line = string_list->front(); - string_list->pop_front(); - if (line.length() > 0) { - log_debug("storing line: %s\n", line.c_str()); - *ostream << line << endl; - } + for(iter = data_list->begin(); iter != data_list->end(); iter++) { + data = (Data *)*iter; + date = data->get_date(); + n_path = get_file_name(device_id, &date); + if (n_path.compare(f_path) != 0) { + if (ostream != NULL) { + ostream->close(); + delete(ostream); + } + f_path = n_path; + log_info("[%s] Opening file for save: %s\n", device_id.c_str(), f_path.c_str()); + ostream = W1Util::open_for_writing(f_path.c_str()); + } + if ((ostream != NULL) && + (ostream->is_open() == true)) { + line = data->to_string(); + if (line.length() > 0) { + log_debug("storing line: %s\n", line.c_str()); + *ostream << line << endl; } - ostream->close(); } else { - log_error("[%s] Could not store data to file: %s\n", device_id.c_str(), f_path.c_str()); + log_error("[%s] File open for data save failed: %s\n", device_id.c_str(), f_path.c_str()); } - delete(ostream); } - else { - log_error("[%s] Could not store data to file: %s\n", device_id.c_str(), f_path.c_str()); + if (ostream != NULL) { + ostream->close(); + delete(ostream); } - delete(date); } bool W1Store::load() { Data *data; ifstream in; - string line; + string data_str; bool ret_val; ret_val = false; @@ -120,18 +129,23 @@ bool W1Store::load() { delete(store_data); store_data = NULL; } + 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, line); - data = Data::parse_data_string(line); - if (store_data == NULL) { - store_data = new DataRange(*data); - } - else { - store_data->add_data(*data); + 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); + } } - delete(data); } ret_val = true; } @@ -149,6 +163,7 @@ Data *W1Store::get_sum() { int jj; Data *data; Data *ret_val; + Date date; ret_val = NULL; data = NULL; @@ -176,7 +191,8 @@ Data *W1Store::get_sum() { //log_debug("new val: %f, sum: %f\n", new_val, sum); } } - ret_val->set_date(data->get_date()); + date = data->get_date(); + ret_val->set_date(&date); if (data != NULL) { delete(data); } @@ -193,6 +209,7 @@ Data *W1Store::get_delta() { Data *ret_val; int ii; DataRange *dr; + Date date; ret_val = NULL; dr = get_oldest_and_newest_data(); @@ -205,10 +222,12 @@ Data *W1Store::get_delta() { 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]; } } - ret_val->set_date(n_data->get_date()); + date = n_data->get_date(); + ret_val->set_date(&date); delete(o_data); delete(n_data); } @@ -252,6 +271,7 @@ Data *W1Store::get_max() { Data *data; Data *ret_val; double min_val; + Date date; ret_val = NULL; data = NULL; @@ -265,7 +285,10 @@ Data *W1Store::get_max() { col_count = store_data->get_data_column_count(); log_debug("data item count per row: %d\n", col_count); min_val = numeric_limits::min(); - ret_val = new Data(col_count, min_val); + 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); @@ -281,7 +304,8 @@ Data *W1Store::get_max() { } } } - ret_val->set_date(data->get_date()); + date = data->get_date(); + ret_val->set_date(&date); if (data != NULL) { delete(data); } @@ -299,6 +323,7 @@ Data *W1Store::get_min() { Data *data; Data *ret_val; double max_val; + Date date; ret_val = NULL; data = NULL; @@ -312,7 +337,10 @@ Data *W1Store::get_min() { 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); + 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); @@ -328,7 +356,8 @@ Data *W1Store::get_min() { } } } - ret_val->set_date(data->get_date()); + date = data->get_date(); + ret_val->set_date(&date); if (data != NULL) { delete(data); } @@ -530,23 +559,23 @@ DataRange *W1Store::get_oldest_and_newest_data() { getline(in, line); if (line.empty() == false) { if (o_data == NULL) { - o_data = Data::parse_data_string(line); + o_data = Data::parse_string(line); } prev_line = line; } } if (prev_line.empty() == false) { - n_data = Data::parse_data_string(prev_line); + n_data = Data::parse_string(prev_line); } } } if ((o_data != NULL) && (n_data != NULL)) { - ret_val = new DataRange(*o_data); - ret_val->add_data(*n_data); + ret_val = new DataRange(o_data); + ret_val->add_data(n_data); if (range_data != NULL) { - range_data = new DataRange(*o_data); - range_data->add_data(*n_data); + range_data = new DataRange(o_data); + range_data->add_data(n_data); } } if (o_data != NULL) {