From 2ae05a6163d8b15f3d8a18a2ab713d1fbd83c505 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 18 Dec 2018 13:18:55 +0300 Subject: vfs crate scaffold --- crates/ra_vfs/src/lib.rs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'crates/ra_vfs/src/lib.rs') diff --git a/crates/ra_vfs/src/lib.rs b/crates/ra_vfs/src/lib.rs index 8f6abadb7..b80c12058 100644 --- a/crates/ra_vfs/src/lib.rs +++ b/crates/ra_vfs/src/lib.rs @@ -15,6 +15,7 @@ mod arena; mod io; use std::{ + thread, cmp::Reverse, path::{Path, PathBuf}, ffi::OsStr, @@ -22,7 +23,12 @@ use std::{ }; use relative_path::RelativePathBuf; -use crate::arena::{ArenaId, Arena}; +use thread_worker::{WorkerHandle, Worker}; + +use crate::{ + arena::{ArenaId, Arena}, + io::FileEvent, +}; /// `RootFilter` is a predicate that checks if a file can belong to a root struct RootFilter { @@ -76,16 +82,24 @@ struct VfsFileData { text: Arc, } -#[derive(Default)] struct Vfs { roots: Arena, files: Arena, // pending_changes: Vec, + worker: Worker)>, + worker_handle: WorkerHandle, } impl Vfs { pub fn new(mut roots: Vec) -> Vfs { - let mut res = Vfs::default(); + let (worker, worker_handle) = io::start(); + + let mut res = Vfs { + roots: Arena::default(), + files: Arena::default(), + worker, + worker_handle, + }; roots.sort_by_key(|it| Reverse(it.as_os_str().len())); @@ -104,6 +118,11 @@ impl Vfs { pub fn commit_changes(&mut self) -> Vec { unimplemented!() } + + pub fn shutdown(self) -> thread::Result<()> { + let _ = self.worker.shutdown(); + self.worker_handle.shutdown() + } } #[derive(Debug, Clone)] -- cgit v1.2.3