From 291d578938d7dc9b1f9bbd1174e444cc831531d9 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 4 Jan 2019 16:01:06 +0300 Subject: extract area to a crate --- crates/ra_vfs/src/arena.rs | 53 ---------------------------------------------- crates/ra_vfs/src/lib.rs | 34 ++++++----------------------- 2 files changed, 7 insertions(+), 80 deletions(-) delete mode 100644 crates/ra_vfs/src/arena.rs (limited to 'crates/ra_vfs/src') diff --git a/crates/ra_vfs/src/arena.rs b/crates/ra_vfs/src/arena.rs deleted file mode 100644 index 6b42ae26d..000000000 --- a/crates/ra_vfs/src/arena.rs +++ /dev/null @@ -1,53 +0,0 @@ -use std::{ - marker::PhantomData, - ops::{Index, IndexMut}, -}; - -#[derive(Clone, Debug)] -pub(crate) struct Arena { - data: Vec, - _ty: PhantomData, -} - -pub(crate) trait ArenaId { - fn from_u32(id: u32) -> Self; - fn to_u32(self) -> u32; -} - -impl Arena { - pub fn alloc(&mut self, value: T) -> ID { - let id = self.data.len() as u32; - self.data.push(value); - ID::from_u32(id) - } - pub fn iter<'a>(&'a self) -> impl Iterator { - self.data - .iter() - .enumerate() - .map(|(idx, value)| (ID::from_u32(idx as u32), value)) - } -} - -impl Default for Arena { - fn default() -> Arena { - Arena { - data: Vec::new(), - _ty: PhantomData, - } - } -} - -impl Index for Arena { - type Output = T; - fn index(&self, idx: ID) -> &T { - let idx = idx.to_u32() as usize; - &self.data[idx] - } -} - -impl IndexMut for Arena { - fn index_mut(&mut self, idx: ID) -> &mut T { - let idx = idx.to_u32() as usize; - &mut self.data[idx] - } -} diff --git a/crates/ra_vfs/src/lib.rs b/crates/ra_vfs/src/lib.rs index 5bbc3e993..cdea18d73 100644 --- a/crates/ra_vfs/src/lib.rs +++ b/crates/ra_vfs/src/lib.rs @@ -13,7 +13,6 @@ //! VFS is based on a concept of roots: a set of directories on the file system //! which are watched for changes. Typically, there will be a root for each //! Cargo package. -mod arena; mod io; use std::{ @@ -32,10 +31,7 @@ use relative_path::RelativePathBuf; use crossbeam_channel::Receiver; use walkdir::DirEntry; use thread_worker::WorkerHandle; - -use crate::{ - arena::{ArenaId, Arena}, -}; +use ra_arena::{Arena, RawId, impl_arena_id}; pub use crate::io::TaskResult as VfsTask; @@ -68,29 +64,13 @@ fn has_rs_extension(p: &Path) -> bool { p.extension() == Some(OsStr::new("rs")) } -#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)] -pub struct VfsRoot(pub u32); - -impl ArenaId for VfsRoot { - fn from_u32(idx: u32) -> VfsRoot { - VfsRoot(idx) - } - fn to_u32(self) -> u32 { - self.0 - } -} - -#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)] -pub struct VfsFile(pub u32); +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct VfsRoot(pub RawId); +impl_arena_id!(VfsRoot); -impl ArenaId for VfsFile { - fn from_u32(idx: u32) -> VfsFile { - VfsFile(idx) - } - fn to_u32(self) -> u32 { - self.0 - } -} +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct VfsFile(pub RawId); +impl_arena_id!(VfsFile); struct VfsFileData { root: VfsRoot, -- cgit v1.2.3