[−][src]Struct tectonic::io::InputHandle
Input handles are basically Read objects with a few extras. We don't require the standard io::Seek because we need to provide a dummy implementation for GZip streams, which we wouldn't be allowed to do because both the trait and the target struct are outside of our crate.
An important role for the InputHandle struct is computing a cryptographic
digest of the input file. The driver uses this information in order to
figure out if the TeX engine needs rerunning. TeX makes our life more
difficult, though, since it has somewhat funky file access patterns. LaTeX
file opens work by opening a file and immediately closing it, which tests
whether the file exists, and then by opening it again for real. Under the
hood, XeTeX reads a couple of bytes from each file upon open to sniff its
encoding. So we can't just stream data from read()
calls into the SHA2
computer, since we end up seeking and reading redundant data.
The current system maintains some internal state that, so far, helps us Do
The Right Thing given all this. If there's a seek on the file, we give up
on our digest computation. But if there's a seek back to the file
beginning, we are open to the possibility of restarting the computation.
But if nothing is ever read from the file, we once again give up on the
computation. The ExecutionState
code then has further pieces that track
access to nonexistent files, which we treat as being equivalent to an
existing empty file for these purposes.
Implementations
impl InputHandle
[src]
pub fn new<T: 'static + InputFeatures>(
name: &OsStr,
inner: T,
origin: InputOrigin
) -> InputHandleⓘNotable traits for InputHandle
impl Read for InputHandle
[src]
name: &OsStr,
inner: T,
origin: InputOrigin
) -> InputHandleⓘ
Notable traits for InputHandle
impl Read for InputHandle
pub fn new_read_only<T: 'static + InputFeatures>(
name: &OsStr,
inner: T,
origin: InputOrigin
) -> InputHandleⓘNotable traits for InputHandle
impl Read for InputHandle
[src]
name: &OsStr,
inner: T,
origin: InputOrigin
) -> InputHandleⓘ
Notable traits for InputHandle
impl Read for InputHandle
pub fn name(&self) -> &OsStr
[src]
pub fn origin(&self) -> InputOrigin
[src]
pub fn into_inner(self) -> Box<dyn InputFeatures>
[src]
Consumes the object and returns the underlying readable handle that it references.
pub fn into_name_digest(self) -> (OsString, Option<DigestData>)
[src]
Consumes the object and returns the SHA256 sum of the content that was read. No digest is returned if there was ever a seek on the input stream, since in that case the results will not be reliable. We also return None if the stream was never read, which is another common TeX access pattern: files are opened, immediately closed, and then opened again. Finally, no digest is returned if the file is marked read-only.
pub fn getc(&mut self) -> Result<u8>
[src]
Various piece of TeX want to use the libc ungetc()
function a lot.
It's kind of gross, but happens often enough that we provide special
support for it. Here's getc()
emulation that can return a previously
ungetc()
-ed character.
pub fn ungetc(&mut self, byte: u8) -> Result<()>
[src]
Here's the ungetc()
emulation.
Trait Implementations
impl InputFeatures for InputHandle
[src]
fn get_size(&mut self) -> Result<usize>
[src]
fn try_seek(&mut self, pos: SeekFrom) -> Result<u64>
[src]
impl Read for InputHandle
[src]
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
[src]
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
1.36.0[src]
fn is_read_vectored(&self) -> bool
[src]
unsafe fn initializer(&self) -> Initializer
[src]
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
1.0.0[src]
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
1.0.0[src]
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
1.6.0[src]
fn by_ref(&mut self) -> &mut Self
1.0.0[src]
fn bytes(self) -> Bytes<Self>
1.0.0[src]
fn chain<R>(self, next: R) -> Chain<Self, R> where
R: Read,
1.0.0[src]
R: Read,
fn take(self, limit: u64) -> Take<Self>
1.0.0[src]
Auto Trait Implementations
impl !RefUnwindSafe for InputHandle
impl !Send for InputHandle
impl !Sync for InputHandle
impl Unpin for InputHandle
impl !UnwindSafe for InputHandle
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<R> ReadBytesExt for R where
R: Read + ?Sized,
R: Read + ?Sized,
fn read_u8(&mut self) -> Result<u8, Error>
fn read_i8(&mut self) -> Result<i8, Error>
fn read_u16<T>(&mut self) -> Result<u16, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_i16<T>(&mut self) -> Result<i16, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_u24<T>(&mut self) -> Result<u32, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_i24<T>(&mut self) -> Result<i32, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_u32<T>(&mut self) -> Result<u32, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_i32<T>(&mut self) -> Result<i32, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_u48<T>(&mut self) -> Result<u64, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_i48<T>(&mut self) -> Result<i64, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_u64<T>(&mut self) -> Result<u64, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_i64<T>(&mut self) -> Result<i64, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_u128<T>(&mut self) -> Result<u128, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_i128<T>(&mut self) -> Result<i128, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_uint<T>(&mut self, nbytes: usize) -> Result<u64, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_int<T>(&mut self, nbytes: usize) -> Result<i64, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_uint128<T>(&mut self, nbytes: usize) -> Result<u128, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_int128<T>(&mut self, nbytes: usize) -> Result<i128, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_f32<T>(&mut self) -> Result<f32, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_f64<T>(&mut self) -> Result<f64, Error> where
T: ByteOrder,
T: ByteOrder,
fn read_u16_into<T>(&mut self, dst: &mut [u16]) -> Result<(), Error> where
T: ByteOrder,
T: ByteOrder,
fn read_u32_into<T>(&mut self, dst: &mut [u32]) -> Result<(), Error> where
T: ByteOrder,
T: ByteOrder,
fn read_u64_into<T>(&mut self, dst: &mut [u64]) -> Result<(), Error> where
T: ByteOrder,
T: ByteOrder,
fn read_u128_into<T>(&mut self, dst: &mut [u128]) -> Result<(), Error> where
T: ByteOrder,
T: ByteOrder,
fn read_i8_into(&mut self, dst: &mut [i8]) -> Result<(), Error>
fn read_i16_into<T>(&mut self, dst: &mut [i16]) -> Result<(), Error> where
T: ByteOrder,
T: ByteOrder,
fn read_i32_into<T>(&mut self, dst: &mut [i32]) -> Result<(), Error> where
T: ByteOrder,
T: ByteOrder,
fn read_i64_into<T>(&mut self, dst: &mut [i64]) -> Result<(), Error> where
T: ByteOrder,
T: ByteOrder,
fn read_i128_into<T>(&mut self, dst: &mut [i128]) -> Result<(), Error> where
T: ByteOrder,
T: ByteOrder,
fn read_f32_into<T>(&mut self, dst: &mut [f32]) -> Result<(), Error> where
T: ByteOrder,
T: ByteOrder,
fn read_f32_into_unchecked<T>(&mut self, dst: &mut [f32]) -> Result<(), Error> where
T: ByteOrder,
T: ByteOrder,
fn read_f64_into<T>(&mut self, dst: &mut [f64]) -> Result<(), Error> where
T: ByteOrder,
T: ByteOrder,
fn read_f64_into_unchecked<T>(&mut self, dst: &mut [f64]) -> Result<(), Error> where
T: ByteOrder,
T: ByteOrder,
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
U: TryFrom<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,