+++ /dev/null
-/*
- * DataRange.cc
- *
- * Created on: Dec 7, 2010
- * Author: lamikr
- */
-
-#include <string>
-#include <iostream>
-#include <sstream>
-#include <iomanip>
-
-#include <stdio.h>
-#include <time.h>
-#include <malloc.h>
-
-#include <plp/log.h>
-
-#include "Data.hh"
-#include "W1Util.hh"
-
-using namespace std;
-using namespace plp;
-using namespace w1;
-
-template <class NumberDataType>
-bool string_to_number(NumberDataType& result,
- const string& string_param,
- std::ios_base& (*format)(std::ios_base&))
-{
- std::istringstream iss(string_param);
- return !(iss >> format >> result).fail();
-}
-
-Data::Data(int size) {
- value_arr.resize(size);
-}
-
-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<double> *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<double> *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<double> *vector_param,
- Date *date_param,
- string unit_param) {
- unsigned int ii;
- unsigned int size;
-
- size = vector_param->size();
- //log_debug("Data(), value count: %d\n", size);
- value_arr.resize(size);
- 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<double> *val_arr_param, Date *date_param) {
- unsigned int ii;
- unsigned int sz;
-
- 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);
-}
-
-Data::~Data() {
-}
-
-Data *Data::clone() {
- Data *ret_val;
-
- 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(Date *date_param) {
- date_time.copy(date_param);
-}
-
-string Data::get_unit() {
- return unit;
-}
-
-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<double> 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
- date = W1Util::parse_date_str(item);
- }
- else if (ii >= 1) {
- suc_flg = string_to_number<double>(val, item, dec);
- if (suc_flg) {
- //log_debug("adding number: %f\n", val);
- v.push_back(val);
- }
- }
- ii++;
- }
- 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(int dec_precision) {
- 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(dec_precision) << value_arr[ii];
- }
- ret_val.append(out.str());
- if (unit.empty() == false) {
- ret_val.append(" ");
- ret_val.append(unit.c_str());
- }
- }
- return ret_val;
-}
-
-string Data::to_string() {
- return to_string(3);
-}
-
-int Data::get_value_count() {
- return value_arr.size();
-}
-
-double Data::get(int indx) {
- return value_arr[indx];
-}
-
-DataRange::DataRange() {
- val_matrix = NULL;
- column_count = 0;
- row_count = 0;
- unit = "";
-}
-
-DataRange::DataRange(Data *data) {
- val_matrix = NULL;
- row_count = 0;
- if (data != NULL) {
- column_count = data->value_arr.size();
- unit = data->get_unit();
- add(data);
- }
- else {
- column_count = 0;
- unit = "";
- }
-}
-
-DataRange::DataRange(DataRange *datarange) {
- val_matrix = NULL;
- row_count = 0;
- column_count = 0;
- unit = "";
- if (datarange != NULL) {
- add(datarange);
- }
-}
-
-DataRange::DataRange(int value_count_per_data_item, string unit_param) {
- val_matrix = NULL;
- column_count = value_count_per_data_item;
- row_count = 0;
- unit = unit_param;
-}
-
-DataRange::~DataRange() {
- unsigned int ii;
- Date *date;
-
- if (val_matrix != NULL) {
- free(val_matrix);
- val_matrix = NULL;
- }
- for (ii = 0; ii < date_list.size(); ii++) {
- date = date_list.at(ii);
- delete(date);
- }
-}
-
-void DataRange::add(Data *data) {
- int ii;
- int indx;
- Date *date;
- int cnt;
-
- if (data != NULL) {
- if ((val_matrix == NULL) &&
- (column_count == 0) &&
- (unit.empty() == true)) {
- column_count = data->value_arr.size();
- unit = data->get_unit();
- }
- cnt = (row_count + 1) * column_count;
- val_matrix = (double *)realloc(val_matrix, cnt * sizeof(double));
- indx = row_count * column_count;
- 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().clone();
- date_list.push_back(date);
- row_count++;
- }
-}
-
-void DataRange::add(DataRange *datarange) {
- int ii;
- int cnt;
- Data *dta;
-
- if (datarange != NULL) {
- cnt = datarange->get_count();
- for (ii = 0; ii < cnt; ii++) {
- dta = datarange->get(ii);
- add(dta);
- delete(dta);
- }
- }
-}
-
-Data *DataRange::get(int row_index) {
- Data *ret_val;
- int start_indx;
- int ii;
- vector<double> 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++) {
- //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(&vect, date, unit);
- }
- return ret_val;
-}
-
-int DataRange::get_count() {
- return row_count;
-}
-
-int DataRange::get_data_item_value_count() {
- return column_count;
-}
-
-Data *DataRange::get_first() {
- Data *ret_val;
-
- ret_val = NULL;
- if (row_count > 0) {
- ret_val = get(0);
- }
- return ret_val;
-}
-
-Data *DataRange::get_last() {
- return get(row_count - 1);
-}
-
-void DataRange::printout() {
- int ii;
- Data *data;
-
- log_debug("---- DataRange, number of data items: %d\n ----", row_count);
- for (ii = 0; ii < row_count; ii++) {
- data = get(ii);
- if (data != NULL) {
- data->printout();
- delete(data);
- }
- }
- log_debug("---- DataRange printout done ----\n");
-}