Skip to main content

BlockCacheReader

Struct BlockCacheReader 

Source
pub struct BlockCacheReader<R> { /* private fields */ }

Implementations§

Source§

impl<R: RangeReader> BlockCacheReader<R>

Source

pub fn new(inner: R, block: u64) -> Self

Wrap inner, fetching block-aligned blocks (clamped to ≥ 4 KiB) and keeping at most DEFAULT_CACHE_CAP bytes of them resident.

Source

pub fn with_cache_cap(self, cap: u64) -> Self

Override the resident-byte cap. The cap is enforced between reads: a single read spanning more than cap bytes of blocks is still served exactly (its blocks are resident while it assembles) and the cache is trimmed back under the cap right after. u64::MAX disables eviction.

Source

pub fn cached_bytes(&self) -> u64

Bytes currently resident in the cache (for stats and tests).

Trait Implementations§

Source§

impl<R: RangeReader> RangeReader for BlockCacheReader<R>

Source§

fn len(&self) -> u64

Total resource length in bytes.
Source§

fn concurrency(&self) -> usize

How many ranges this reader can usefully have in flight at once — the planner’s hint for probe-vs-scan and batch-size decisions (a phone’s serial sync-XHR reader reports 1; the CLI’s threaded HTTP client and the browser’s concurrent-fetch variants report their fan-out). Purely advisory: correctness never depends on it. Defaults to 1 (sequential).
Source§

fn read_at(&self, offset: u64, len: u64) -> Result<Vec<u8>>

Read len bytes starting at offset. Implementations should error on an out-of-bounds range rather than truncating.
Source§

fn read_many(&self, ranges: &[(u64, u64)]) -> Result<Vec<Vec<u8>>>

Read several (offset, len) ranges, returning each range’s bytes in request order. These ranges are independent, so a reader whose backing store is high-latency but parallelizable (an HTTP client) overrides this to issue the reads concurrently — turning N round trips into ~N/P. The default fetches them sequentially. Any range failing fails the batch.
Source§

fn is_empty(&self) -> bool

True when the resource is empty.

Auto Trait Implementations§

§

impl<R> !Freeze for BlockCacheReader<R>

§

impl<R> RefUnwindSafe for BlockCacheReader<R>
where R: RefUnwindSafe,

§

impl<R> Send for BlockCacheReader<R>
where R: Send,

§

impl<R> Sync for BlockCacheReader<R>
where R: Sync,

§

impl<R> Unpin for BlockCacheReader<R>
where R: Unpin,

§

impl<R> UnsafeUnpin for BlockCacheReader<R>
where R: UnsafeUnpin,

§

impl<R> UnwindSafe for BlockCacheReader<R>
where R: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V