From f840fcb2f525c13809d6a736e434155edf075a06 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 19 Mar 2020 16:00:11 +0100 Subject: Simplify Arena to use a generic index --- crates/ra_hir_def/src/trace.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'crates/ra_hir_def/src/trace.rs') diff --git a/crates/ra_hir_def/src/trace.rs b/crates/ra_hir_def/src/trace.rs index 9769e88df..ced07577d 100644 --- a/crates/ra_hir_def/src/trace.rs +++ b/crates/ra_hir_def/src/trace.rs @@ -9,28 +9,28 @@ //! absolute offsets. The `Trace` structure (inspired, at least in name, by //! Kotlin's `BindingTrace`) allows use the same code to compute both //! projections. -use ra_arena::{map::ArenaMap, Arena, ArenaId, RawId}; +use ra_arena::{map::ArenaMap, Arena, Idx, RawId}; -pub(crate) struct Trace { - arena: Option>, - map: Option>, +pub(crate) struct Trace { + arena: Option>, + map: Option, V>>, len: u32, } -impl Trace { - pub(crate) fn new_for_arena() -> Trace { +impl Trace { + pub(crate) fn new_for_arena() -> Trace { Trace { arena: Some(Arena::default()), map: None, len: 0 } } - pub(crate) fn new_for_map() -> Trace { + pub(crate) fn new_for_map() -> Trace { Trace { arena: None, map: Some(ArenaMap::default()), len: 0 } } - pub(crate) fn alloc(&mut self, value: impl FnOnce() -> V, data: impl FnOnce() -> T) -> ID { + pub(crate) fn alloc(&mut self, value: impl FnOnce() -> V, data: impl FnOnce() -> T) -> Idx { let id = if let Some(arena) = &mut self.arena { arena.alloc(data()) } else { - let id = ID::from_raw(RawId::from(self.len)); + let id = Idx::::from_raw(RawId::from(self.len)); self.len += 1; id }; @@ -41,11 +41,11 @@ impl Trace { id } - pub(crate) fn into_arena(mut self) -> Arena { + pub(crate) fn into_arena(mut self) -> Arena { self.arena.take().unwrap() } - pub(crate) fn into_map(mut self) -> ArenaMap { + pub(crate) fn into_map(mut self) -> ArenaMap, V> { self.map.take().unwrap() } } -- cgit v1.2.3