4 * Created on: Nov 7, 2010
11 #include "W1DataList.hh"
21 DataRange::~DataRange() {
22 if (first_data != NULL) {
26 if (last_data != NULL) {
32 W1DataList::W1DataList(string device_id_param) {
35 device_id = device_id_param;
36 base_dir = W1Store::get_location_base_dir();
37 device_dir = W1Util::concat_paths(base_dir.c_str(), device_id.c_str());
40 W1DataList::~W1DataList() {
44 Data *W1DataList::find_first_data(vector<string> year_vector) {
48 vector<string> month_vector;
49 vector<string> data_vector;
54 if (year_vector.size() > 0) {
55 // dirs are alphabetically sorted
56 year_dir = year_vector.at(0);
57 year_dir = W1Util::concat_paths(device_dir.c_str(), year_dir.c_str());
58 month_vector = W1Util::get_subdirectories(year_dir);
59 for (ii = 0; ii < month_vector.size(); ii++) {
60 month_dir = month_vector.at(ii);
61 month_dir = W1Util::concat_paths(year_dir.c_str(), month_dir.c_str());
62 // scan data files from month dir
63 data_vector = W1Util::get_data_files(month_dir);
64 if (data_vector.size() > 0) {
65 first_file = data_vector.at(0);
66 first_file = W1Util::concat_paths(month_dir.c_str(), first_file.c_str());
67 ret_val = W1Util::load_first_data_row(first_file.c_str());
75 Data *W1DataList::find_last_data(vector<string> year_vector) {
79 vector<string> month_vector;
80 vector<string> data_vector;
86 size = year_vector.size();
88 // dirs are alphabetically sorted
89 year_dir = year_vector.at(size - 1);
90 year_dir = W1Util::concat_paths(device_dir.c_str(), year_dir.c_str());
91 month_vector = W1Util::get_subdirectories(year_dir);
92 for (ii = month_vector.size() - 1; ii >= 0; ii--) {
93 month_dir = month_vector.at(ii);
94 month_dir = W1Util::concat_paths(year_dir.c_str(), month_dir.c_str());
95 // scan data files from month dir
96 data_vector = W1Util::get_data_files(month_dir);
97 size = data_vector.size();
99 last_file = data_vector.at(size - 1);
100 last_file = W1Util::concat_paths(month_dir.c_str(), last_file.c_str());
101 ret_val = W1Util::load_last_data_row(last_file.c_str());
109 DataRange *W1DataList::get_data_range() {
112 struct dirent *year_dirent;
113 vector<string> year_list;
118 year_list = W1Util::get_subdirectories(device_dir);
119 first_data = find_first_data(year_list);
120 if (first_data != NULL) {
121 last_data = find_last_data(year_list);
122 if (last_data != NULL) {
123 ret_val = new DataRange();
124 ret_val->first_data = first_data;
125 ret_val->last_data = last_data;