4 * Created on: Dec 7, 2010
25 template <class NumberDataType>
26 bool string_to_number(NumberDataType& result,
27 const std::string& string_param,
28 std::ios_base& (*format)(std::ios_base&))
30 std::istringstream iss(string_param);
31 return !(iss >> format >> result).fail();
34 Data::Data(int size) {
35 value_arr.resize(size);
38 Data::Data(int size, double default_value) {
41 value_arr.resize(size);
42 for (ii = 0; ii < size; ii++) {
43 value_arr[ii] = default_value;
47 Data::Data(vector<double> vector_param, Date *date_param) {
51 size = vector_param.size();
52 //log_debug("Data(), value count: %d\n", size);
53 value_arr.resize(size);
54 for (ii = 0; ii < vector_param.size(); ii++) {
55 value_arr[ii] = vector_param.at(ii);
56 //log_debug("Data(), value[%d]: %f\n", ii, value_arr[ii]);
58 date_time.copy(date_param);
61 Data::Data(std::valarray<double> value_arr_param, Date *date_param) {
64 value_arr.resize(value_arr_param.size());
65 for (ii = 0; ii < value_arr_param.size(); ii++) {
66 value_arr[ii] = value_arr_param[ii];
68 date_time.copy(date_param);
77 ret_val = new Data(value_arr, &date_time);
81 plp::Date Data::get_date() {
85 void Data::set_date(plp::Date date) {
86 date_time.copy(&date);
89 void Data::printout() {
93 for (ii = 0; ii < value_arr.size(); ii++) {
94 log_debug(" data[%d] = %f\n", ii, value_arr[ii]);
98 Data *Data::parse_data_string(const string& dataline) {
99 stringstream ss(dataline);
109 while(getline(ss, item, '|')) {
112 date = W1Util::parse_date_str(item);
115 suc_flg = string_to_number<double>(val, item, dec);
117 //log_debug("adding number: %f\n", val);
123 ret_val = new Data(v, &date);
127 DataRange::DataRange(int value_count_per_data_item) {
129 column_count = value_count_per_data_item;
133 DataRange::DataRange(Data data) {
135 column_count = data.value_arr.size();
140 DataRange::~DataRange() {
144 if (val_matrix != NULL) {
148 for (ii = 0; ii < date_list.size(); ii++) {
149 date = date_list.at(ii);
154 void DataRange::add_data(Data data) {
159 //log_debug("old row_count: %d, column_count: %d, value_arr_size: %d\n", row_count, column_count, data.value_arr.size());
160 val_matrix = (double *)realloc(val_matrix, ((row_count + 1) * column_count) * sizeof(double));
161 indx = row_count * column_count;
162 for (ii = 0; ii < data.value_arr.size(); ii++) {
163 val_matrix[indx + ii] = data.value_arr[ii];
166 for (int ii = 0; ii < ((row_count + 1) * column_count); ii++) {
167 log_debug("data_matrix[%d] = %f\n", ii, val_matrix[ii]);
170 date = data.get_date();
171 date_list.push_back(date.clone());
175 Data *DataRange::get_data(int row_index) {
179 vector<double> vector;
183 if ((row_index >= 0) &&
184 (row_index < row_count)) {
185 start_indx = row_index * column_count;
186 for (ii = 0; ii < column_count; ii++) {
187 vector.push_back(val_matrix[start_indx + ii]);
189 date = date_list.at(row_index);
190 ret_val = new Data(vector, date);
195 int DataRange::get_data_row_count() {
199 int DataRange::get_data_column_count() {
203 Data *DataRange::get_first_data() {
208 ret_val = get_data(0);
213 Data *DataRange::get_last_data() {
214 return get_data(row_count - 1);
217 void DataRange::printout() {
221 log_debug("---- DataRange, number of data items: %d\n ----", row_count);
222 for (ii = 0; ii < row_count; ii++) {
229 log_debug("---- DataRange printout done ----\n");