use self::source::Source;
use dashmap::DashMap;
use source::SourceId;
use std::sync::Arc;
pub mod filename;
pub mod fragment;
pub mod immutable_string;
pub mod source;
pub type SourceRef = Arc<Source>;
#[derive(Debug, Default, Clone)]
pub struct SourceMap {
inner: Arc<DashMap<SourceId, SourceRef>>,
}
impl SourceMap {
pub fn new() -> Self {
Default::default()
}
pub fn add(&self, source: Source) -> SourceRef {
let source: SourceRef = Arc::new(source);
self.inner.insert(source.id, Arc::clone(&source));
source
}
pub fn get(&self, id: SourceId) -> Option<SourceRef> {
self.inner.get(&id).map(|source| Arc::clone(&source))
}
}