#[cfg(not(feature = "single_generation_mt"))]
use super::TaskExclusion;
use super::{MTControlBlock, MTGeneration, ObjectsLink};
use crate::list::List;
use crate::util::NonNull;
use std::sync::RwLockReadGuard;
#[cfg(not(feature = "single_generation_mt"))]
use std::sync::{MutexGuard, RwLockWriteGuard};
pub(crate) struct MTGenerationReadLock<'a> {
raw_generation_ptr: NonNull<MTGeneration>,
_objects: RwLockReadGuard<'a, List<MTControlBlock, ObjectsLink>>,
}
#[cfg(not(feature = "single_generation_mt"))]
pub(crate) struct MTGenerationWriteLock<'a> {
_task_exclusion_lock: MutexGuard<'a, TaskExclusion>,
pub(super) objects: RwLockWriteGuard<'a, List<MTControlBlock, ObjectsLink>>,
}
impl<'a> MTGenerationReadLock<'a> {
#[allow(
clippy::missing_const_for_fn,
reason = "You can't create these in a const context anyway."
)]
#[inline]
pub(super) fn new(
raw_generation_ptr: NonNull<MTGeneration>,
objects: RwLockReadGuard<'a, List<MTControlBlock, ObjectsLink>>,
) -> Self {
MTGenerationReadLock {
raw_generation_ptr,
_objects: objects,
}
}
#[inline]
pub(crate) fn same_generation(&self, other: &MTGeneration) -> bool {
self.raw_generation_ptr == NonNull::from_ref(other)
}
}
#[cfg(not(feature = "single_generation_mt"))]
impl<'a> MTGenerationWriteLock<'a> {
#[allow(
clippy::missing_const_for_fn,
reason = "You can't create these in a const context anyway."
)]
#[inline]
pub(super) fn new(
task_exclusion_lock: MutexGuard<'a, TaskExclusion>,
objects: RwLockWriteGuard<'a, List<MTControlBlock, ObjectsLink>>,
) -> Self {
MTGenerationWriteLock {
_task_exclusion_lock: task_exclusion_lock,
objects,
}
}
}