[−][src]Trait pdb::Source
pub trait Source<'s>: Debug { fn view(
&mut self,
slices: &[SourceSlice]
) -> Result<Box<SourceView<'s>>, Error>; }
The pdb
crate accesses PDB files via the pdb::Source
trait.
This library is written with zero-copy in mind. Source
s provide SourceView
s which need not
outlive their parent, supporting implementations of e.g. memory mapped files.
PDB files are "multi-stream files" (MSF) under the hood. MSFs have various layers of
indirection, but ultimately the MSF code asks a Source
to view a series of
{ offset, size }
records, which the Source
provides as a
contiguous &[u8]
.
Default
There is a default Source
implementation for std::io::Read
+ std::io::Seek
+
std::fmt::Debug
, allowing a std::fs::File
to be treated as pdb::Source
. This
implementation provides views by allocating a buffer, seeking, and reading the contents into
that buffer.
Alignment
The requested offsets will always be aligned to the MSF's page size, which is always a power of
two and is usually (but not always) 4096 bytes. The requested sizes will also be multiples of the
page size, except for the size of the final SourceSlice
, which may be smaller.
PDB files are specified as always being a multiple of the page size, so Source
implementations
are free to e.g. map whole pages and return a sub-slice of the requested length.
Required Methods
fn view(&mut self, slices: &[SourceSlice]) -> Result<Box<SourceView<'s>>, Error>
Provides a contiguous view of the source file composed of the requested position(s).
Note that the SourceView's as_slice() method cannot fail, so view()
is the time to raise
IO errors.