use crate::SourceRootId;
use rustc_hash::FxHashMap;
use std::ops::Index;
#[derive(Debug, Clone)]
pub struct PackageData {
pub source_root: SourceRootId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct PackageId(pub u32);
#[derive(Debug, Clone, Default)]
pub struct PackageSet {
arena: FxHashMap<PackageId, PackageData>,
}
impl PackageSet {
pub fn add_package(&mut self, source_root: SourceRootId) -> PackageId {
let data = PackageData { source_root };
let package_id = PackageId(self.arena.len() as u32);
self.arena.insert(package_id, data);
package_id
}
pub fn iter(&self) -> impl Iterator<Item = PackageId> + '_ {
self.arena.keys().copied()
}
}
impl Index<PackageId> for PackageSet {
type Output = PackageData;
fn index(&self, index: PackageId) -> &Self::Output {
&self.arena[&index]
}
}