11 h1 ^= std::hash<uint64_t> {}(coord) + 0x9e3779b9 + (h1 << 6) + (h1 >> 2);
15 h2 ^= std::hash<uint64_t> {}(coord) + 0x9e3779b9 + (h2 << 6) + (h2 >> 2);
18 return h1 ^ (h2 << 1);
22 : m_max_cache_size(max_size)
28 std::lock_guard<std::recursive_mutex> lock(
m_mutex);
56 std::lock_guard<std::recursive_mutex> lock(
m_mutex, std::adopt_lock);
61 it->second.mark_accessed();
65 }
catch (
const std::exception& e) {
66 std::cerr <<
"Exception in get_cached_region: " << e.what() <<
'\n';
69 std::cerr <<
"Unknown exception in get_cached_region" <<
'\n';
80 std::unique_lock<std::recursive_mutex> lock(
m_mutex, std::try_to_lock);
82 if (!lock.owns_lock()) {
83 std::cerr <<
"Warning: Could not acquire mutex lock in get_cached_segment, potential deadlock avoided" <<
'\n';
88 }
catch (
const std::exception& e) {
89 std::cerr <<
"Exception in get_cached_segment: " << e.what() <<
'\n';
92 std::cerr <<
"Unknown exception in get_cached_segment" <<
'\n';
102 seg.
cache = *cache_opt;
111 auto it =
m_cache.find(region);
114 it->second.mark_accessed();
141 auto it = std::ranges::find(
m_lru_list, region);
RegionCacheManager(size_t max_size)
std::optional< RegionCache > get_cached_segment(const RegionSegment &segment)
std::optional< RegionSegment > get_segment_with_cache(const RegionSegment &segment)
void cache_segment(const RegionSegment &segment)
std::optional< RegionCache > get_cached_region(const Region ®ion)
std::recursive_mutex m_mutex
void update_lru(const Region ®ion)
std::list< Region > m_lru_list
void evict_lru_if_needed()
void cache_region(const RegionCache &cache)
std::unordered_map< Region, RegionCache, RegionHash > m_cache
std::optional< RegionCache > get_cached_region_internal(const Region ®ion)
Region source_region
Region this cache corresponds to.
Stores cached data for a region, with metadata for cache management.
std::size_t operator()(const Region ®ion) const
bool is_cached
Flag indicating if data is cached.
Region source_region
Associated region.
RegionCache cache
Multi-channel cached audio data.
Represents a discrete segment of audio data with caching capabilities.
std::vector< uint64_t > end_coordinates
Ending frame index (inclusive)
std::vector< uint64_t > start_coordinates
Starting frame index (inclusive)
Represents a point or span in N-dimensional space.