X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2FDeviceData.cc;h=c564377a146d747b9c051092e3ef55bae5664fa1;hb=4d28d5175f0bd7f930f67b1280d998eddd21ed80;hp=790bcaef7140cbbc1abf1e186cc81f87ec7dc3a4;hpb=36db98966cfc73303c75879811cdedb472d71a4a;p=lib1wire.git diff --git a/src/DeviceData.cc b/src/DeviceData.cc index 790bcae..c564377 100644 --- a/src/DeviceData.cc +++ b/src/DeviceData.cc @@ -4,6 +4,8 @@ * Created on: Nov 7, 2010 * Author: lamikr */ +#include + #include #include #include @@ -22,6 +24,15 @@ using namespace w1; using namespace std; using namespace plp; +template +bool string_to_number(NumberDataType& result, + const std::string& string_param, + std::ios_base& (*format)(std::ios_base&)) +{ + istringstream iss(string_param); + return !(iss >> format >> result).fail(); +} + DeviceData::DeviceData(string device_id_param) { string base_dir; @@ -40,81 +51,21 @@ DeviceData::~DeviceData() { } } -Data *DeviceData::find_newest_data(string year_name_param) { - int ii; - string mon_dr; - vector mon_vcr; - vector d_vcr; - string f_name; - StoreDay *store; - Data *ret_val; - string year_dr; - int size; - - ret_val = NULL; - year_dr = W1Util::concat_paths(device_dir, year_name_param); - mon_vcr = W1Util::get_subdirectories(year_dr); - for (ii = mon_vcr.size() - 1; ii >= 0; ii--) { - mon_dr = mon_vcr.at(ii); - mon_dr = W1Util::concat_paths(year_dr, mon_dr); - // scan data files from month dir - d_vcr = W1Util::get_data_files(mon_dr); - size = d_vcr.size(); - if (size > 0) { - f_name = d_vcr.at(size - 1); - f_name = W1Util::concat_paths(mon_dr, f_name); - store = new StoreDay(f_name); - ret_val = store->get_newest_data(); - delete(store); - break; - } - } - return ret_val; -} - Data *DeviceData::find_newest_data(vector year_name_vector_param) { string year_name; int size; Data *ret_val; + Date date; + int val_int; ret_val = NULL; size = year_name_vector_param.size(); if (size > 0) { // dirs are alphabetically sorted year_name = year_name_vector_param.at(size - 1); - ret_val = find_newest_data(year_name); - } - return ret_val; -} - -Data *DeviceData::find_oldest_data(string year_name_param) { - int size; - unsigned int ii; - string year_dr; - string mon_dr; - vector mon_vcr; - vector dta_vcr; - string f_name; - StoreDay *store; - Data *ret_val; - - ret_val = NULL; - year_dr = W1Util::concat_paths(device_dir, year_name_param); - mon_vcr = W1Util::get_subdirectories(year_dr); - for (ii = 0; ii < mon_vcr.size(); ii++) { - mon_dr = mon_vcr.at(ii); - mon_dr = W1Util::concat_paths(year_dr, mon_dr); - // scan data files from month dir - dta_vcr = W1Util::get_data_files(mon_dr); - size = dta_vcr.size(); - if (size > 0) { - f_name = dta_vcr.at(0); - f_name = W1Util::concat_paths(mon_dr, f_name); - store = new StoreDay(f_name); - ret_val = store->get_oldest_data(); - delete(store); - break; - } + string_to_number(val_int, year_name, dec); + date.year = val_int; + ret_val = StoreCache::get_newest_data(&date, device_id, PERIOD_YEARLY); } return ret_val; } @@ -123,13 +74,17 @@ Data *DeviceData::find_oldest_data(vector year_name_vector_param) { int size; string year_name; Data *ret_val; + Date date; + int val_int; ret_val = NULL; size = year_name_vector_param.size(); if (size > 0) { // dirs are alphabetically sorted year_name = year_name_vector_param.at(0); - ret_val = find_oldest_data(year_name); + string_to_number(val_int, year_name, dec); + date.year = val_int; + ret_val = StoreCache::get_oldest_data(&date, device_id, PERIOD_YEARLY); } return ret_val; }