/* * Copyright (c) 2025, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include #include namespace RequestServer { class DiskCache { public: static ErrorOr create(); struct CacheHasOpenEntry { }; Variant, CacheHasOpenEntry> create_entry(Request&); Variant, CacheHasOpenEntry> open_entry(Request&); Requests::CacheSizes estimate_cache_size_accessed_since(UnixDateTime since) const; void remove_entries_accessed_since(UnixDateTime since); LexicalPath const& cache_directory() { return m_cache_directory; } void cache_entry_closed(Badge, CacheEntry const&); private: DiskCache(NonnullRefPtr, LexicalPath cache_directory, CacheIndex); enum class CheckReaderEntries { No, Yes, }; bool check_if_cache_has_open_entry(Request&, u64 cache_key, CheckReaderEntries); NonnullRefPtr m_database; HashMap, 1>> m_open_cache_entries; HashMap, 1>> m_requests_waiting_completion; LexicalPath m_cache_directory; CacheIndex m_index; }; }