12 template<
typename Ptr> [[nodiscard]]
const string&
operator()(
const Ptr& p)
const {
17 GetURLFromDecompressed,
XXHasher> decompressCache;
21 : file(std::move(file_))
28 auto it = decompressCache.find(
getURL());
29 assert(it !=
end(decompressCache));
30 assert(it->get() == decompressed);
32 if ((*it)->useCount == 0) {
34 decompressCache.erase(it);
39 void CompressedFileAdapter::decompress()
41 if (decompressed)
return;
43 const std::string& url =
getURL();
44 auto it = decompressCache.find(url);
45 if (it ==
end(decompressCache)) {
46 auto d = std::make_unique<Decompressed>();
47 decompress(*file, *d);
50 it = decompressCache.insert_noDuplicateCheck(std::move(d));
53 decompressed = it->get();
62 if (decompressed->
size < (pos + num)) {
65 const auto& buf = decompressed->
buf;
66 memcpy(buffer, buf.data() + pos, num);
72 throw FileException(
"Writing to compressed files not yet supported");
78 return { decompressed->
buf.
data(), decompressed->
size };
89 return decompressed->
size;
104 throw FileException(
"Truncating compressed files not yet supported.");
114 return file ? file->getURL() : decompressed->
cachedURL;
130 return file ? file->getModificationDate()
std::string_view getOriginalName() final
virtual void decompress(FileBase &file, Decompressed &decompressed)=0
void write(const void *buffer, size_t num) final
void truncate(size_t size) final
span< const uint8_t > mmap() final
bool isReadOnly() const final
~CompressedFileAdapter() override
CompressedFileAdapter(std::unique_ptr< FileBase > file)
void seek(size_t pos) final
const std::string & getURL() const final
time_t getModificationDate() final
void read(void *buffer, size_t num) final
const T * data() const
Returns pointer to the start of the memory buffer.
This file implemented 3 utility functions:
time_t cachedModificationDate
const string & operator()(const Ptr &p) const
constexpr auto end(const zstring_view &x)