use alloc::sync::Arc;
use super::{SharedJpegInput, SharedJpegInputInner, SharedJpegInputStorage};
use crate::adapter::fast_packet::cache::shared_allocation::{
shared_owner_bytes, shared_slice_owner_bytes,
};
use crate::adapter::fast_packet::JpegPlanCacheError;
impl SharedJpegInput {
#[must_use]
pub fn data_capacity(&self) -> usize {
match &self.0 {
SharedJpegInputStorage::Copied(input) => input.bytes.capacity(),
SharedJpegInputStorage::ArcSlice(input) => input.len(),
}
}
#[must_use]
pub fn ptr_eq(left: &Self, right: &Self) -> bool {
match (&left.0, &right.0) {
(SharedJpegInputStorage::Copied(left), SharedJpegInputStorage::Copied(right)) => {
Arc::ptr_eq(left, right)
}
(SharedJpegInputStorage::ArcSlice(left), SharedJpegInputStorage::ArcSlice(right)) => {
Arc::ptr_eq(left, right)
}
(SharedJpegInputStorage::Copied(_), SharedJpegInputStorage::ArcSlice(_))
| (SharedJpegInputStorage::ArcSlice(_), SharedJpegInputStorage::Copied(_)) => false,
}
}
pub fn retained_cache_bytes(&self) -> Result<usize, JpegPlanCacheError> {
match &self.0 {
SharedJpegInputStorage::Copied(input) => {
shared_owner_bytes::<SharedJpegInputInner>(input.bytes.capacity())
}
SharedJpegInputStorage::ArcSlice(input) => shared_slice_owner_bytes(input.len()),
}
}
}