use std::collections::HashMap;
mod link;
use std::ops::BitOr;
use crate::{
resource::{Buffer, Image, Resource},
Id,
};
pub use self::link::{Link, LinkNode};
#[derive(Clone, Debug)]
pub struct Chain<R: Resource> {
links: Vec<Link<R>>,
}
impl<R> Chain<R>
where
R: Resource,
{
pub fn links(&self) -> &[Link<R>] {
&self.links
}
pub fn new() -> Self {
Chain { links: Vec::new() }
}
pub fn last_link_mut(&mut self) -> Option<&mut Link<R>> {
self.links.last_mut()
}
pub fn add_link(&mut self, link: Link<R>) -> &mut Link<R> {
self.links.push(link);
self.links.last_mut().unwrap()
}
pub fn usage(&self) -> R::Usage {
self.links
.iter()
.map(Link::usage)
.fold(R::no_usage(), BitOr::bitor)
}
}
pub(crate) type BufferChains = HashMap<Id, Chain<Buffer>>;
pub(crate) type ImageChains = HashMap<Id, Chain<Image>>;