use std::sync::Arc;
use super::handle::BlockRegistrationHandle;
use crate::blocks::{BlockDuplicationPolicy, BlockMetadata, CompleteBlock, ImmutableBlockInner};
use crate::pools::BlockStore;
use crate::pools::store::upgrade_or_resurrect;
impl BlockRegistrationHandle {
pub(crate) fn register_block<T: BlockMetadata + Sync>(
&self,
block: CompleteBlock<T>,
duplication_policy: BlockDuplicationPolicy,
store: &Arc<BlockStore<T>>,
) -> Arc<ImmutableBlockInner<T>> {
assert_eq!(
block.sequence_hash(),
self.seq_hash(),
"Attempted to register block with different sequence hash"
);
store.register_completed_block(block, self.clone(), duplication_policy)
}
#[inline]
pub(crate) fn try_get_inner<T: BlockMetadata + Sync>(
&self,
store: &Arc<BlockStore<T>>,
touch: bool,
) -> Option<Arc<ImmutableBlockInner<T>>> {
upgrade_or_resurrect::<T>(self, store, touch)
}
}