]> pilppa.org Git - lib1wire.git/blob - src/Data.cc
d9c6e1a70eb59dc00a93f009e057e15c4fc10fd1
[lib1wire.git] / src / Data.cc
1 /*
2  * DataRange.cc
3  *
4  *  Created on: Dec 7, 2010
5  *      Author: lamikr
6  */
7
8 #include <iostream>
9
10 #include <stdio.h>
11 #include <time.h>
12 #include <malloc.h>
13
14 #include "Data.hh"
15 #include <plp/log.h>
16
17 using namespace std;
18 using namespace plp;
19 using namespace w1;
20
21 Data::Data(int size) {
22         value_arr.resize(size);
23 }
24
25 Data::Data(vector<double> vector_param, Date *date_param) {
26         int     ii;
27         int     size;
28
29         size    = vector_param.size();
30         //log_debug("Data(), value count: %d\n", size);
31         value_arr.resize(size);
32         for (int ii = 0; ii < vector_param.size(); ii++) {
33                 value_arr[ii]   = vector_param.at(ii);
34                 //log_debug("Data(), value[%d]: %f\n", ii, value_arr[ii]);
35         }
36         date_time.copy(date_param);
37 }
38
39 Data::Data(std::valarray<double> value_arr_param, Date *date_param) {
40         value_arr.resize(value_arr_param.size());
41         for (int ii = 0; ii < value_arr_param.size(); ii++) {
42                 value_arr[ii]   = value_arr_param[ii];
43         }
44         date_time.copy(date_param);
45 }
46
47 Data::~Data() {
48 }
49
50 plp::Date Data::get_date() {
51         return date_time;
52 }
53
54 void Data::set_date(plp::Date date) {
55         date_time.copy(&date);
56 }
57
58 void Data::printout() {
59         int     ii;
60
61         date_time.printout();
62         for (ii = 0; ii < value_arr.size(); ii++) {
63                 log_debug("  data[%d] = %f\n", ii, value_arr[ii]);
64         }
65 }
66
67 DataRange::DataRange(int value_count_per_data_item) {
68         val_matrix      = NULL;
69         column_count    = value_count_per_data_item;
70         row_count       = 0;
71 }
72
73 DataRange::DataRange(Data data) {
74         val_matrix      = NULL;
75         column_count    = data.value_arr.size();
76         row_count       = 0;
77         add_data(data);
78 }
79
80 DataRange::~DataRange() {
81         int     ii;
82         Date    *date;
83
84         if (val_matrix != NULL) {
85                 free(val_matrix);
86                 val_matrix      = NULL;
87         }
88         for (ii = 0; ii < date_list.size(); ii++) {
89                 date    = date_list.at(ii);
90                 delete(date);
91         }
92 }
93
94 void DataRange::add_data(Data data) {
95         int                     ii;
96         int                     r_count;
97         int                     indx;
98         Date                    date;
99
100         //log_debug("old row_count: %d, column_count: %d, value_arr_size: %d\n", row_count, column_count, data.value_arr.size());
101         val_matrix      = (double *)realloc(val_matrix, ((row_count + 1) * column_count) * sizeof(double));
102         indx            = row_count * column_count;
103         for (ii = 0; ii < data.value_arr.size(); ii++) {
104                 val_matrix[indx + ii]   = data.value_arr[ii];
105         }
106 /*
107         for (int ii = 0; ii < ((row_count + 1) * column_count); ii++) {
108                 log_debug("data_matrix[%d] = %f\n", ii, val_matrix[ii]);
109         }
110 */
111         date    = data.get_date();
112         date_list.push_back(date.clone());
113         row_count++;
114 }
115
116 Data *DataRange::get_data(int row_index) {
117         Data            *ret_val;
118         int             start_indx;
119         int             ii;
120         vector<double>  vector;
121         Date            *date;
122
123         ret_val = NULL;
124         if ((row_index >= 0) &&
125             (row_index < row_count)) {
126                 start_indx      = row_index * column_count;
127                 for (ii = 0; ii < column_count; ii++) {
128                         vector.push_back(val_matrix[start_indx + ii]);
129                 }
130                 date    = date_list.at(row_index);
131                 ret_val = new Data(vector, date);
132         }
133         return ret_val;
134 }
135
136 int DataRange::get_data_row_count() {
137         return row_count;
138 }
139
140 int DataRange::get_data_column_count() {
141         return column_count;
142 }
143
144 Data *DataRange::get_first_data() {
145         Data    *ret_val;
146
147         ret_val = NULL;
148         if (row_count > 0) {
149                 ret_val = get_data(0);
150         }
151         return ret_val;
152 }
153
154 Data *DataRange::get_last_data() {
155         return get_data(row_count - 1);
156 }