use super::ChainEpoch;
pub const NO_QUANTIZATION: QuantSpec = QuantSpec { unit: 1, offset: 0 };
#[derive(Copy, Clone)]
pub struct QuantSpec {
pub unit: ChainEpoch,
pub offset: ChainEpoch,
}
impl QuantSpec {
pub fn quantize_up(&self, epoch: ChainEpoch) -> ChainEpoch {
let offset = self.offset % self.unit;
let remainder = (epoch - offset) % self.unit;
let quotient = (epoch - offset) / self.unit;
if remainder == 0
|| epoch - offset < 0
{
self.unit * quotient + offset
} else {
self.unit * (quotient + 1) + offset
}
}
pub fn quantize_down(&self, epoch: ChainEpoch) -> ChainEpoch {
let next = self.quantize_up(epoch);
if epoch == next {
next
} else {
next - self.unit
}
}
}