4 * Created on: Dec 7, 2010
24 template <class NumberDataType>
25 bool string_to_number(NumberDataType& result,
26 const string& string_param,
27 std::ios_base& (*format)(std::ios_base&))
29 std::istringstream iss(string_param);
30 return !(iss >> format >> result).fail();
33 Data::Data(int size) {
34 value_arr.resize(size);
37 Data::Data(int size, double default_value, string unit_param) {
40 value_arr.resize(size);
41 for (ii = 0; ii < size; ii++) {
42 value_arr[ii] = default_value;
47 Data::Data(vector<double> *vect_param) {
51 sz = vect_param->size();
52 //log_debug("Data(), value count: %d\n", size);
54 for (ii = 0; ii < sz; ii++) {
55 value_arr[ii] = vect_param->at(ii);
56 //log_debug("Data(), value[%d]: %f\n", ii, value_arr[ii]);
60 Data::Data(std::vector<double> *vector_param, string unit_param) {
64 sz = vector_param->size();
65 //log_debug("Data(), value count: %d\n", size);
67 for (ii = 0; ii < sz; ii++) {
68 value_arr[ii] = vector_param->at(ii);
69 //log_debug("Data(), value[%d]: %f\n", ii, value_arr[ii]);
74 Data::Data(vector<double> *vector_param,
80 size = vector_param->size();
81 //log_debug("Data(), value count: %d\n", size);
82 value_arr.resize(size);
83 for (ii = 0; ii < size; ii++) {
84 value_arr[ii] = vector_param->at(ii);
85 //log_debug("Data(), value[%d]: %f\n", ii, value_arr[ii]);
87 date_time.copy(date_param);
91 Data::Data(std::valarray<double> *val_arr_param, Date *date_param) {
95 sz = val_arr_param->size();
97 for (ii = 0; ii < sz; ii++) {
98 value_arr[ii] = (*val_arr_param)[ii];
100 date_time.copy(date_param);
106 Data *Data::clone() {
109 ret_val = new Data(&value_arr, &date_time);
113 void Data::printout() {
114 log_debug(" data: %s\n", to_string().c_str());
117 plp::Date Data::get_date() {
121 void Data::set_date(Date *date_param) {
122 date_time.copy(date_param);
125 string Data::get_unit() {
129 Data *Data::parse_string(const string& dataline) {
130 stringstream ss(dataline);
143 //log_debug("parse_string: %s\n", dataline.c_str());
144 while(getline(ss, item, '|')) {
147 date = Date::parse_date_str(item);
150 suc_flg = string_to_number<double>(val, item, dec);
152 //log_debug("adding number: %f\n", val);
158 ii = item.find_last_of(" ");
161 ((ii + 1) <= (sz - 1))) {
162 unit = item.substr(ii + 1);
168 ret_val = new Data(&v, &date, unit);
173 string Data::to_string(int dec_precision) {
178 ret_val = date_time.to_string();
179 if (value_arr.size() > 0) {
180 for (ii = 0; ii < value_arr.size(); ii++) {
181 out << "|" << fixed << setprecision(dec_precision) << value_arr[ii];
183 ret_val.append(out.str());
184 if (unit.empty() == false) {
186 ret_val.append(unit.c_str());
192 string Data::to_string() {
196 int Data::get_value_count() {
197 return value_arr.size();
200 double Data::get(int indx) {
201 return value_arr[indx];
204 DataRange::DataRange() {
211 DataRange::DataRange(Data *data) {
215 column_count = data->value_arr.size();
216 unit = data->get_unit();
225 DataRange::DataRange(DataRange *datarange) {
230 if (datarange != NULL) {
235 DataRange::DataRange(int value_count_per_data_item, string unit_param) {
237 column_count = value_count_per_data_item;
242 DataRange::~DataRange() {
246 if (val_matrix != NULL) {
250 for (ii = 0; ii < date_list.size(); ii++) {
251 date = date_list.at(ii);
256 void DataRange::add(Data *data) {
263 if ((val_matrix == NULL) &&
264 (column_count == 0) &&
265 (unit.empty() == true)) {
266 column_count = data->value_arr.size();
267 unit = data->get_unit();
269 cnt = (row_count + 1) * column_count;
270 val_matrix = (double *)realloc(val_matrix, cnt * sizeof(double));
271 indx = row_count * column_count;
272 cnt = data->value_arr.size();
273 if (cnt != column_count) {
274 log_error("Error when adding data... Invalid data item count!\n");
275 if (cnt > column_count) {
279 for (ii = cnt; ii < column_count; ii++) {
280 val_matrix[indx + ii] = 0;
284 for (ii = 0; ii < cnt; ii++) {
285 val_matrix[indx + ii] = data->value_arr[ii];
288 for (int ii = 0; ii < ((row_count + 1) * column_count); ii++) {
289 log_debug("data_matrix[%d] = %f\n", ii, val_matrix[ii]);
292 date = data->get_date().clone();
293 date_list.push_back(date);
298 void DataRange::add(DataRange *datarange) {
303 if (datarange != NULL) {
304 cnt = datarange->get_count();
305 for (ii = 0; ii < cnt; ii++) {
306 dta = datarange->get(ii);
313 Data *DataRange::get(int row_index) {
322 if ((row_index >= 0) &&
323 (row_index < row_count)) {
324 start_indx = row_index * column_count;
325 for (ii = 0; ii < column_count; ii++) {
326 //val = val_matrix[0];
327 val = val_matrix[start_indx + ii];
328 //log_debug("val[%d] = %f\n", (start_indx + ii), val);
331 date = date_list.at(row_index);
332 ret_val = new Data(&vect, date, unit);
337 int DataRange::get_count() {
341 int DataRange::get_data_item_value_count() {
345 Data *DataRange::get_first() {
355 Data *DataRange::get_last() {
356 return get(row_count - 1);
359 void DataRange::printout() {
363 log_debug("---- DataRange, number of data items: %d\n ----", row_count);
364 for (ii = 0; ii < row_count; ii++) {
371 log_debug("---- DataRange printout done ----\n");