use crate::{dag::DagUnit, MultiKeychain, UnitFinalizationHandler};
mod election;
mod extender;
mod units;
use extender::Extender;
pub struct Ordering<MK: MultiKeychain, UFH: UnitFinalizationHandler> {
extender: Extender<DagUnit<UFH::Hasher, UFH::Data, MK>>,
finalization_handler: UFH,
}
impl<MK: MultiKeychain, UFH: UnitFinalizationHandler> Ordering<MK, UFH> {
pub fn new(finalization_handler: UFH) -> Self {
let extender = Extender::new();
Ordering {
extender,
finalization_handler,
}
}
pub fn add_unit(&mut self, unit: DagUnit<UFH::Hasher, UFH::Data, MK>) {
for batch in self.extender.add_unit(unit) {
self.finalization_handler
.batch_finalized(batch.into_iter().map(|unit| unit.into()).collect());
}
}
}