#pragma once #include #include #include #include /** @brief cache storage manager */ class CacheManager { private: /** @brief currently opened cache location */ std::string cache_path; /** @brief pointers to open file handles */ std::vector files; const unsigned int max_tries = 100; virtual void retry(std::string label, std::function action, std::function retry_if); public: /** @brief initialize CacheManager class at `cache_path` */ CacheManager(const char* cache_path); CacheManager(std::string cache_path); /** @brief close cache */ virtual ~CacheManager(); /** @brief create cache folder structure */ virtual void init_cache(); /** @brief update cache date */ virtual void update_cache(); /** * @brief check cache file structure * * automatically creates cache when non-existant */ virtual void verify_cache(); /** @brief get fstream for file in cache or create file */ virtual std::fstream* cache_get(const char* filename); virtual std::fstream* cache_get(std::string filename); /** @brief check if file exists in cache */ virtual bool cache_exists(const char* filename); virtual bool cache_exists(std::string filename); /** @brief add cache path before filename */ virtual std::string prefix_cache_path(const char* filename); /** @brief currently opened cache update unix timestamp */ uint64_t age; };