+void W1Device::cache(Data *new_data) {
+ Data *data;
+ int dec_precision;
+
+ data = new_data->clone();
+ pthread_mutex_lock(&plock);
+ memory_cache.push_back(data);
+ if (memory_cache.size() > 5) {
+ dec_precision = get_data_decimal_precision();
+ StoreDay::save(id, &memory_cache, dec_precision);
+ while(memory_cache.empty() == false) {
+ data = memory_cache.back();
+ memory_cache.pop_back();
+ delete(data);
+ }
+ }
+ pthread_mutex_unlock(&plock);
+}
+
+void W1Device::save_and_clean_cache() {
+ Data *data;
+ int dec_precision;
+
+ dec_precision = get_data_decimal_precision();
+ pthread_mutex_lock(&plock);
+ /* needs to be casted to long unsigned int value is "unsigned int" in some
+ toolchains and that would otherwise cause an warning/error
+ */
+ log_debug("memory cache size: %lu\n", (long unsigned int)memory_cache.size());
+ StoreDay::save(id, &memory_cache, dec_precision);
+ while(memory_cache.empty() == false) {
+ data = memory_cache.back();
+ memory_cache.pop_back();
+ delete(data);
+ }
+ pthread_mutex_unlock(&plock);