32#include <unordered_map>
55 explicit DiskCache(
const std::string& basePath =
"")
57 namespace fs = std::filesystem;
60 cacheDir_ = fs::temp_directory_path() /
"grok_cache_XXXXXX";
65 cacheDir_ = fs::temp_directory_path() / (
"grok_cache_" + std::to_string(_getpid()));
67 if(!mkdtemp(tmpl.data()))
70 cacheDir_ = fs::temp_directory_path() / (
"grok_cache_" + std::to_string(getpid()));
82 std::filesystem::create_directories(
cacheDir_);
88 std::filesystem::remove_all(
cacheDir_, ec);
98 void store(uint16_t tileIndex,
const uint8_t* data,
size_t size)
101 std::ofstream out(path, std::ios::binary | std::ios::trunc);
105 out.write(
reinterpret_cast<const char*
>(data),
static_cast<std::streamsize
>(
size));
108 std::lock_guard<std::mutex> lock(
mutex_);
116 std::optional<std::vector<uint8_t>>
load(uint16_t tileIndex)
119 std::lock_guard<std::mutex> lock(
mutex_);
125 std::ifstream in(path, std::ios::binary | std::ios::ate);
129 auto fileSize =
static_cast<size_t>(in.tellg());
135 std::vector<uint8_t> result(fileSize);
136 in.read(
reinterpret_cast<char*
>(result.data()),
static_cast<std::streamsize
>(fileSize));
146 std::lock_guard<std::mutex> lock(
mutex_);
155 std::lock_guard<std::mutex> lock(
mutex_);
156 for(
auto& [idx, _] :
index_)
159 std::filesystem::remove(
tilePath(idx), ec);
166 std::lock_guard<std::mutex> lock(
mutex_);
171 std::filesystem::path
tilePath(uint16_t tileIndex)
const
173 return cacheDir_ / (
"tile_" + std::to_string(tileIndex) +
".grk");
177 std::unordered_map<uint16_t, size_t>
index_;
bool contains(uint16_t tileIndex) const
Check if a tile is stored on disk.
Definition DiskCache.h:144
DiskCache(const std::string &basePath="")
Create a disk cache in a temporary directory.
Definition DiskCache.h:55
void clear()
Remove all cached entries from disk.
Definition DiskCache.h:153
size_t size() const
Definition DiskCache.h:164
std::filesystem::path tilePath(uint16_t tileIndex) const
Definition DiskCache.h:171
~DiskCache()
Definition DiskCache.h:85
DiskCache(const DiskCache &)=delete
std::optional< std::vector< uint8_t > > load(uint16_t tileIndex)
Load raw bytes from disk for a given tile.
Definition DiskCache.h:116
std::mutex mutex_
Definition DiskCache.h:178
void store(uint16_t tileIndex, const uint8_t *data, size_t size)
Store raw bytes to disk for a given tile.
Definition DiskCache.h:98
std::unordered_map< uint16_t, size_t > index_
Definition DiskCache.h:177
DiskCache & operator=(const DiskCache &)=delete
std::filesystem::path cacheDir_
Definition DiskCache.h:176
ResWindow.
Definition CompressedChunkCache.h:36