use crate::RegionCached;
pub trait RegionCachedExt<T> {
fn with_cached<F, R>(&self, f: F) -> R
where
F: FnOnce(&T) -> R;
fn set_global(&self, value: T);
}
pub trait RegionCachedCopyExt<T>
where
T: Copy,
{
fn get_cached(&self) -> T;
}
impl<T> RegionCachedExt<T> for linked::StaticInstancePerThread<RegionCached<T>>
where
T: Clone + Send + Sync + 'static,
{
#[inline]
fn with_cached<F, R>(&self, f: F) -> R
where
F: FnOnce(&T) -> R,
{
self.with(|inner| inner.with_cached(f))
}
#[inline]
fn set_global(&self, value: T) {
self.with(|inner| inner.set_global(value));
}
}
impl<T> RegionCachedCopyExt<T> for linked::StaticInstancePerThread<RegionCached<T>>
where
T: Clone + Copy + Send + Sync + 'static,
{
#[inline]
fn get_cached(&self) -> T {
self.with(|inner| inner.get_cached())
}
}