+Data *W1Device::get_data() {
+ Data *ret_val;
+ vector<double> *vect;
+
+ log_debug("get_data() started\n");
+ ret_val = NULL;
+ vect = get_raw_data();
+ if (vect != NULL) {
+ log_debug("get_data() got raw data\n");
+ ret_val = new Data(vect, get_unit());
+ cache(ret_val);
+ delete(vect);
+ log_debug("get_data() got raw data done\n");
+ }
+ else {
+ log_debug("get_data() try to read old already saved data\n");
+ // read old data already saved
+ ret_val = reader->get_latest_data();
+ log_debug("get_data() try to read old already saved data done\n");
+ }
+ return ret_val;
+}
+
+void W1Device::cache(Data *data) {
+ // TODO: add mutex for memory_cache
+ memory_cache.push_back(data);
+ if (memory_cache.size() > 5) {
+ save_and_clean_cache();
+ }
+}
+
+void W1Device::save_and_clean_cache() {
+ list<Data *>::iterator iter;
+ Data *data;
+ int dec_precision;
+
+ dec_precision = get_data_decimal_precision();
+ StoreDay::save(id, &memory_cache, dec_precision);
+ for(iter = memory_cache.begin(); iter != memory_cache.end(); iter++) {
+ data = (Data *)*iter;
+ delete(data);
+ }
+ memory_cache.clear();
+}