Expose some internals for priroda

This commit is contained in:
Oliver Scherer 2018-11-27 14:41:53 +01:00
parent 6f9ee8b9e5
commit edc2fb5f60
2 changed files with 12 additions and 6 deletions

View File

@ -37,15 +37,15 @@ mod range_map;
mod mono_hash_map;
mod stacked_borrows;
use crate::fn_call::EvalContextExt as MissingFnsEvalContextExt;
use crate::operator::EvalContextExt as OperatorEvalContextExt;
use crate::intrinsic::EvalContextExt as IntrinsicEvalContextExt;
use crate::tls::{EvalContextExt as TlsEvalContextExt, TlsData};
pub use crate::fn_call::EvalContextExt as MissingFnsEvalContextExt;
pub use crate::operator::EvalContextExt as OperatorEvalContextExt;
pub use crate::intrinsic::EvalContextExt as IntrinsicEvalContextExt;
pub use crate::tls::{EvalContextExt as TlsEvalContextExt, TlsData};
use crate::range_map::RangeMap;
#[allow(unused_imports)] // FIXME rustc bug https://github.com/rust-lang/rust/issues/53682
use crate::helpers::{ScalarExt, EvalContextExt as HelpersEvalContextExt};
pub use crate::helpers::{ScalarExt, EvalContextExt as HelpersEvalContextExt};
use crate::mono_hash_map::MonoHashMap;
use crate::stacked_borrows::{EvalContextExt as StackedBorEvalContextExt};
pub use crate::stacked_borrows::{EvalContextExt as StackedBorEvalContextExt};
// Used by priroda
pub use crate::stacked_borrows::{Borrow, Stack, Stacks, BorStackItem};

View File

@ -17,6 +17,12 @@ use crate::AllocMap;
#[derive(Debug, Clone)]
pub struct MonoHashMap<K: Hash + Eq, V>(RefCell<FxHashMap<K, Box<V>>>);
impl<K: Hash + Eq, V> MonoHashMap<K, V> {
pub fn values<T>(&self, f: impl FnOnce(&mut Iterator<Item=&V>) -> T) -> T {
f(&mut self.0.borrow().values().map(|v| &**v))
}
}
impl<K: Hash + Eq, V> Default for MonoHashMap<K, V> {
fn default() -> Self {
MonoHashMap(RefCell::new(Default::default()))