use std::collections::HashSet;
use crate::{Change, ChangeHash};
#[derive(Debug, Clone)]
pub(crate) struct ChangeQueue {
changes: Vec<Change>,
hashes: HashSet<ChangeHash>,
}
impl ChangeQueue {
pub(crate) fn new() -> Self {
Self {
changes: Vec::new(),
hashes: HashSet::new(),
}
}
pub(crate) fn push(&mut self, c: Change) {
self.hashes.insert(c.hash());
self.changes.push(c);
}
pub(crate) fn is_empty(&self) -> bool {
self.changes.is_empty()
}
pub(crate) fn has_hash(&self, hash: &ChangeHash) -> bool {
self.hashes.contains(hash)
}
pub(crate) fn iter(&self) -> impl Iterator<Item = &Change> {
self.changes.iter()
}
pub(crate) fn take(&mut self) -> Vec<Change> {
self.hashes.clear();
std::mem::take(&mut self.changes)
}
}