Add an Mmap wrapper to rustc_data_structures
This wrapper implements StableAddress and falls back to directly reading the file on wasm32
This commit is contained in:
parent
3aedcf06b7
commit
8331dbe6d0
12 changed files with 56 additions and 50 deletions
|
@ -84,6 +84,7 @@ pub mod snapshot_map;
|
|||
pub mod stable_map;
|
||||
pub mod svh;
|
||||
pub use ena::snapshot_vec;
|
||||
pub mod memmap;
|
||||
pub mod sorted_map;
|
||||
pub mod stable_set;
|
||||
#[macro_use]
|
||||
|
|
40
compiler/rustc_data_structures/src/memmap.rs
Normal file
40
compiler/rustc_data_structures/src/memmap.rs
Normal file
|
@ -0,0 +1,40 @@
|
|||
use std::fs::File;
|
||||
use std::io;
|
||||
use std::ops::Deref;
|
||||
|
||||
use crate::owning_ref::StableAddress;
|
||||
|
||||
/// A trivial wrapper for [`memmap2::Mmap`] that implements [`StableAddress`].
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub struct Mmap(memmap2::Mmap);
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
pub struct Mmap(Vec<u8>);
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
impl Mmap {
|
||||
pub unsafe fn map(file: File) -> io::Result<Self> {
|
||||
memmap2::Mmap::map(&file).map(Mmap)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
impl Mmap {
|
||||
pub unsafe fn map(mut file: File) -> io::Result<Self> {
|
||||
use std::io::Read;
|
||||
|
||||
let mut data = Vec::new();
|
||||
file.read_to_end(&mut data)?;
|
||||
Ok(Mmap(data))
|
||||
}
|
||||
}
|
||||
|
||||
impl Deref for Mmap {
|
||||
type Target = [u8];
|
||||
|
||||
fn deref(&self) -> &[u8] {
|
||||
&*self.0
|
||||
}
|
||||
}
|
||||
|
||||
unsafe impl StableAddress for Mmap {}
|
Loading…
Add table
Add a link
Reference in a new issue