From e0eb33605a917d2e7289debe0c915e75286b834f Mon Sep 17 00:00:00 2001
From: Aleksey Kladov <aleksey.kladov@gmail.com>
Date: Thu, 25 Oct 2018 17:40:24 +0300
Subject: Encapsulate CrateGraph a bit

---
 crates/ra_analysis/src/lib.rs | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

(limited to 'crates/ra_analysis/src')

diff --git a/crates/ra_analysis/src/lib.rs b/crates/ra_analysis/src/lib.rs
index 703938cf9..af7894cd0 100644
--- a/crates/ra_analysis/src/lib.rs
+++ b/crates/ra_analysis/src/lib.rs
@@ -15,9 +15,9 @@ mod completion;
 use std::{
     fmt,
     sync::Arc,
-    collections::BTreeMap,
 };
 
+use rustc_hash::FxHashMap;
 use ra_syntax::{AtomEdit, File, TextRange, TextUnit};
 use relative_path::{RelativePath, RelativePathBuf};
 use rayon::prelude::*;
@@ -55,9 +55,21 @@ pub struct FileId(pub u32);
 #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
 pub struct CrateId(pub u32);
 
-#[derive(Debug, Clone, Default, PartialEq, Eq, Hash)]
+#[derive(Debug, Clone, Default, PartialEq, Eq)]
 pub struct CrateGraph {
-    pub crate_roots: BTreeMap<CrateId, FileId>,
+    crate_roots: FxHashMap<CrateId, FileId>,
+}
+
+impl CrateGraph {
+    pub fn new() -> CrateGraph {
+        CrateGraph::default()
+    }
+    pub fn add_crate_root(&mut self, file_id: FileId) -> CrateId{
+        let crate_id = CrateId(self.crate_roots.len() as u32);
+        let prev = self.crate_roots.insert(crate_id, file_id);
+        assert!(prev.is_none());
+        crate_id
+    }
 }
 
 pub trait FileResolver: fmt::Debug + Send + Sync + 'static {
-- 
cgit v1.2.3