X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2FData.cc;h=e81039b13bc039f040d0f0f6f9d21a29aff43a5f;hb=6dea0b59503a71874c4476c05044fff3c5ae26a5;hp=c964bc411f3f2d8763aeec3a135763a69b8d2d22;hpb=c4d8504b99fa1e354d15b2b91e4e2797f54ba028;p=lib1wire.git diff --git a/src/Data.cc b/src/Data.cc index c964bc4..e81039b 100644 --- a/src/Data.cc +++ b/src/Data.cc @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -24,7 +25,7 @@ using namespace w1; template bool string_to_number(NumberDataType& result, - const std::string& string_param, + const string& string_param, std::ios_base& (*format)(std::ios_base&)) { std::istringstream iss(string_param); @@ -35,35 +36,68 @@ Data::Data(int size) { value_arr.resize(size); } -Data::Data(int size, double default_value) { +Data::Data(int size, double default_value, string unit_param) { int ii; value_arr.resize(size); for (ii = 0; ii < size; ii++) { value_arr[ii] = default_value; } + unit = unit_param; } -Data::Data(vector vector_param, Date *date_param) { +Data::Data(vector *vect_param) { + unsigned int ii; + unsigned int sz; + + sz = vect_param->size(); + //log_debug("Data(), value count: %d\n", size); + value_arr.resize(sz); + for (ii = 0; ii < sz; ii++) { + value_arr[ii] = vect_param->at(ii); + //log_debug("Data(), value[%d]: %f\n", ii, value_arr[ii]); + } +} + +Data::Data(std::vector *vector_param, string unit_param) { + unsigned int ii; + unsigned int sz; + + sz = vector_param->size(); + //log_debug("Data(), value count: %d\n", size); + value_arr.resize(sz); + for (ii = 0; ii < sz; ii++) { + value_arr[ii] = vector_param->at(ii); + //log_debug("Data(), value[%d]: %f\n", ii, value_arr[ii]); + } + unit = unit_param; +} + +Data::Data(vector *vector_param, + Date *date_param, + string unit_param) { unsigned int ii; unsigned int size; - size = vector_param.size(); + size = vector_param->size(); //log_debug("Data(), value count: %d\n", size); value_arr.resize(size); - for (ii = 0; ii < vector_param.size(); ii++) { - value_arr[ii] = vector_param.at(ii); + for (ii = 0; ii < size; ii++) { + value_arr[ii] = vector_param->at(ii); //log_debug("Data(), value[%d]: %f\n", ii, value_arr[ii]); } date_time.copy(date_param); + unit = unit_param; } -Data::Data(std::valarray value_arr_param, Date *date_param) { - unsigned int ii; +Data::Data(std::valarray *val_arr_param, Date *date_param) { + unsigned int ii; + unsigned int sz; - value_arr.resize(value_arr_param.size()); - for (ii = 0; ii < value_arr_param.size(); ii++) { - value_arr[ii] = value_arr_param[ii]; + sz = val_arr_param->size(); + value_arr.resize(sz); + for (ii = 0; ii < sz; ii++) { + value_arr[ii] = (*val_arr_param)[ii]; } date_time.copy(date_param); } @@ -74,38 +108,41 @@ Data::~Data() { Data *Data::clone() { Data *ret_val; - ret_val = new Data(value_arr, &date_time); + ret_val = new Data(&value_arr, &date_time); return ret_val; } +void Data::printout() { + log_debug(" data: %s\n", to_string().c_str()); +} + plp::Date Data::get_date() { return date_time; } -void Data::set_date(plp::Date date) { - date_time.copy(&date); +void Data::set_date(Date *date_param) { + date_time.copy(date_param); } -void Data::printout() { - unsigned int ii; - - date_time.printout(); - for (ii = 0; ii < value_arr.size(); ii++) { - log_debug(" data[%d] = %f\n", ii, value_arr[ii]); - } +string Data::get_unit() { + return unit; } -Data *Data::parse_data_string(const string& dataline) { +Data *Data::parse_string(const string& dataline) { stringstream ss(dataline); string item; double val; Data *ret_val; int ii; + int sz; bool suc_flg; vector v; + string unit; Date date; ii = 0; + ret_val = NULL; + log_debug("parse_string: %s\n", dataline.c_str()); while(getline(ss, item, '|')) { if (ii == 0) { // parse date @@ -114,27 +151,60 @@ Data *Data::parse_data_string(const string& dataline) { else if (ii >= 1) { suc_flg = string_to_number(val, item, dec); if (suc_flg) { - //log_debug("adding number: %f\n", val); + log_debug("adding number: %f\n", val); v.push_back(val); } } ii++; } - ret_val = new Data(v, &date); + ii = item.find_last_of(" "); + sz = item.size(); + if ((ii >= 0) && + ((ii + 1) <= (sz - 1))) { + unit = item.substr(ii + 1); + } + else { + unit = ""; + } + if (v.size() > 0) { + ret_val = new Data(&v, &date, unit); + } + return ret_val; +} + +string Data::to_string() { + unsigned int ii; + ostringstream out; + string ret_val; + + ret_val = date_time.to_string(); + if (value_arr.size() > 0) { + for (ii = 0; ii < value_arr.size(); ii++) { + out << fixed << setprecision(3) << value_arr[ii]; + ret_val.append("|"); + ret_val.append(out.str()); + } + if (unit.empty() == false) { + ret_val.append(" "); + ret_val.append(unit.c_str()); + } + } return ret_val; } -DataRange::DataRange(int value_count_per_data_item) { +DataRange::DataRange(Data *data) { val_matrix = NULL; - column_count = value_count_per_data_item; + column_count = data->value_arr.size(); row_count = 0; + unit = data->get_unit(); + add_data(data); } -DataRange::DataRange(Data data) { +DataRange::DataRange(int value_count_per_data_item, string unit_param) { val_matrix = NULL; - column_count = data.value_arr.size(); + column_count = value_count_per_data_item; row_count = 0; - add_data(data); + unit = unit_param; } DataRange::~DataRange() { @@ -151,24 +221,38 @@ DataRange::~DataRange() { } } -void DataRange::add_data(Data data) { - unsigned int ii; - int indx; - Date date; +void DataRange::add_data(Data *data) { + int ii; + int indx; + Date *date; + int cnt; //log_debug("old row_count: %d, column_count: %d, value_arr_size: %d\n", row_count, column_count, data.value_arr.size()); - val_matrix = (double *)realloc(val_matrix, ((row_count + 1) * column_count) * sizeof(double)); + cnt = (row_count + 1) * column_count; + val_matrix = (double *)realloc(val_matrix, cnt * sizeof(double)); indx = row_count * column_count; - for (ii = 0; ii < data.value_arr.size(); ii++) { - val_matrix[indx + ii] = data.value_arr[ii]; + cnt = data->value_arr.size(); + if (cnt != column_count) { + log_error("Error when adding data... Invalid data item count!\n"); + if (cnt > column_count) { + cnt = column_count; + } + else { + for (ii = cnt; ii < column_count; ii++) { + val_matrix[indx + ii] = 0; + } + } + } + for (ii = 0; ii < cnt; ii++) { + val_matrix[indx + ii] = data->value_arr[ii]; } /* for (int ii = 0; ii < ((row_count + 1) * column_count); ii++) { log_debug("data_matrix[%d] = %f\n", ii, val_matrix[ii]); } */ - date = data.get_date(); - date_list.push_back(date.clone()); + date = data->get_date().clone(); + date_list.push_back(date); row_count++; } @@ -176,18 +260,22 @@ Data *DataRange::get_data(int row_index) { Data *ret_val; int start_indx; int ii; - vector vector; + vector vect; Date *date; + double val; ret_val = NULL; if ((row_index >= 0) && (row_index < row_count)) { start_indx = row_index * column_count; for (ii = 0; ii < column_count; ii++) { - vector.push_back(val_matrix[start_indx + ii]); + //val = val_matrix[0]; + val = val_matrix[start_indx + ii]; + log_debug("val[%d] = %f\n", (start_indx + ii), val); + vect.push_back(val); } date = date_list.at(row_index); - ret_val = new Data(vector, date); + ret_val = new Data(&vect, date, unit); } return ret_val; }