]> pilppa.org Git - lib1wire.git/blob - src/Store.cc
Optimization for year and monthly data calculation.
[lib1wire.git] / src / Store.cc
1 /*
2  * Store.cc
3  *
4  *  Created on: Jan 20, 2011
5  *      Author: lamikr
6  */
7 #include <fstream>
8
9 #include "Store.hh"
10
11 #include <plp/log.h>
12
13 using namespace std;
14 using namespace plp;
15
16 Store::Store(string device_id_param,
17                 Date *date_param) {
18         device_id       = device_id_param;
19         if (date_param != NULL) {
20                 date            = date_param->clone();
21         }
22         else {
23                 date    = NULL;
24         }
25         store_data      = NULL;
26         range_data      = NULL;
27 }
28
29 Store::~Store() {
30         if (store_data != NULL) {
31                 delete(store_data);
32                 store_data      = NULL;
33         }
34         if (date != NULL) {
35                 delete(date);
36         }
37 }
38
39 bool Store::load(string fname_param) {
40         Data            *data;
41         ifstream        in;
42         string          data_str;
43         bool            ret_val;
44
45         ret_val = false;
46         if (store_data != NULL) {
47                 delete(store_data);
48                 store_data      = NULL;
49         }
50         if (access(fname_param.c_str(), R_OK) == 0) {
51                 //log_debug("opening file: %s\n", fname_param.c_str());
52                 in.open(fname_param.c_str());
53                 if (in.is_open() == true) {
54                         while (in.eof() == false) {
55                                 getline(in, data_str);
56                                 if (data_str.empty() == false) {
57                                         data    = Data::parse_string(data_str);
58                                         if (data != NULL) {
59                                                 if (store_data == NULL) {
60                                                         store_data      = new DataRange(data);
61                                                 }
62                                                 else {
63                                                         store_data->add(data);
64                                                 }
65                                                 delete(data);
66                                         }
67                                 }
68                         }
69                         ret_val = true;
70                 }
71                 else {
72                         log_error("Could not open data file: %s\n", fname_param.c_str());
73                 }
74         }
75         else {
76                 log_error("Could not find file: %s\n", fname_param.c_str());
77         }
78         return ret_val;
79 }