]> pilppa.org Git - lib1wire.git/blobdiff - src/W1DataList.cc
add min,max,mean,sum and delta calculations for stored data.
[lib1wire.git] / src / W1DataList.cc
index 5f85db07b6420b9ae18c4810ca02099bef9c3d92..844db8e34a435359b76e230e0f9a9f62befcf93b 100644 (file)
@@ -22,15 +22,17 @@ using namespace plp;
 W1DataList::W1DataList(string device_id_param) {
        string          base_dir;
 
-       device_id       = device_id_param;
-       base_dir        = W1Store::get_base_dir_name();
-       device_dir      = W1Util::concat_paths(base_dir, device_id);
-       device_ch_dir   = W1Util::concat_paths(base_dir, "cache");
-       device_ch_dir   = W1Util::concat_paths(device_ch_dir, device_id);
+       device_config           = new DeviceConfig(device_id_param);
+       summary_calc_type       = device_config->get_summary_calculation_type();
+       device_id               = device_id_param;
+       base_dir                = W1Store::get_base_dir_name();
+       device_dir              = W1Util::concat_paths(base_dir, device_id);
+       device_ch_dir           = W1Util::concat_paths(base_dir, "cache");
+       device_ch_dir           = W1Util::concat_paths(device_ch_dir, device_id);
 }
 
 W1DataList::~W1DataList() {
-       //delete(device_dir);
+       delete(device_config);
 }
 
 Data *W1DataList::find_oldest_data(vector<string> year_vector) {
@@ -168,16 +170,33 @@ long int get_interval_type(Date *start_date,
 }
 
 Data *W1DataList::get_daily_summary(Date *date) {
-       Data    *data;
+       Data    *ret_val;
        W1Store *store;
 
        store   = new W1Store(device_id, date);
        store->load();
-       data    = store->get_mean();
-       data->printout();
+       switch(summary_calc_type) {
+               case SUM:
+                       ret_val = store->get_sum();
+                       break;
+               case DELTA:
+                       ret_val = store->get_delta();
+                       break;
+               case MEAN:
+               default:
+                       ret_val = store->get_mean();
+                       break;
+               case MAX:
+                       ret_val = store->get_max();
+                       break;
+               case MIN:
+                       ret_val = store->get_min();
+                       break;
+       }
+       ret_val->printout();
        delete(store);
 
-       return data;
+       return ret_val;
 }
 
 DataRange *W1DataList::get_daily_summary(Date *start_date,