/* * W1DataList.cc * * Created on: Nov 7, 2010 * Author: lamikr */ #include #include #include "W1Util.hh" #include "W1DataList.hh" #include "W1Store.hh" using namespace w1; using namespace std; Data::~Data() { free(date_time); } DataRange::~DataRange() { if (first_data != NULL) { delete(first_data); first_data = NULL; } if (last_data != NULL) { delete(last_data); last_data = NULL; } } W1DataList::W1DataList(string device_id_param) { string base_dir; device_id = device_id_param; base_dir = W1Store::get_location_base_dir(); device_dir = W1Util::concat_paths(base_dir.c_str(), device_id.c_str()); } W1DataList::~W1DataList() { //delete(device_dir); } Data *W1DataList::find_first_data(vector year_vector) { int ii; string year_dir; string month_dir; vector month_vector; vector data_vector; string first_file; Data *ret_val; ret_val = NULL; if (year_vector.size() > 0) { // dirs are alphabetically sorted year_dir = year_vector.at(0); year_dir = W1Util::concat_paths(device_dir.c_str(), year_dir.c_str()); month_vector = W1Util::get_subdirectories(year_dir); for (ii = 0; ii < month_vector.size(); ii++) { month_dir = month_vector.at(ii); month_dir = W1Util::concat_paths(year_dir.c_str(), month_dir.c_str()); // scan data files from month dir data_vector = W1Util::get_data_files(month_dir); if (data_vector.size() > 0) { first_file = data_vector.at(0); first_file = W1Util::concat_paths(month_dir.c_str(), first_file.c_str()); ret_val = W1Util::load_first_data_row(first_file.c_str()); break; } } } return ret_val; } Data *W1DataList::find_last_data(vector year_vector) { int ii; string year_dir; string month_dir; vector month_vector; vector data_vector; string last_file; Data *ret_val; int size; ret_val = NULL; size = year_vector.size(); if (size > 0) { // dirs are alphabetically sorted year_dir = year_vector.at(size - 1); year_dir = W1Util::concat_paths(device_dir.c_str(), year_dir.c_str()); month_vector = W1Util::get_subdirectories(year_dir); for (ii = month_vector.size() - 1; ii >= 0; ii--) { month_dir = month_vector.at(ii); month_dir = W1Util::concat_paths(year_dir.c_str(), month_dir.c_str()); // scan data files from month dir data_vector = W1Util::get_data_files(month_dir); size = data_vector.size(); if (size > 0) { last_file = data_vector.at(size - 1); last_file = W1Util::concat_paths(month_dir.c_str(), last_file.c_str()); ret_val = W1Util::load_last_data_row(last_file.c_str()); break; } } } return ret_val; } DataRange *W1DataList::get_data_range() { DataRange *ret_val; DIR *data_dir; struct dirent *year_dirent; vector year_list; Data *first_data; Data *last_data; ret_val = NULL; year_list = W1Util::get_subdirectories(device_dir); first_data = find_first_data(year_list); if (first_data != NULL) { last_data = find_last_data(year_list); if (last_data != NULL) { ret_val = new DataRange(); ret_val->first_data = first_data; ret_val->last_data = last_data; } } return ret_val; }