use alice_protocol_reader::rdh::RDH;
#[derive(Debug, Default)]
pub struct CdpTracker {
payload_mem_pos: u64,
gbt_word_counter: u16,
gbt_word_padding_size_bytes: u8,
is_start_of_data: bool, }
impl CdpTracker {
pub fn new(rdh: &impl RDH, rdh_mem_pos: u64) -> Self {
Self {
payload_mem_pos: rdh_mem_pos + 64,
gbt_word_counter: 0,
gbt_word_padding_size_bytes: if rdh.data_format() == 0 {
6 } else {
0 },
is_start_of_data: true,
}
}
pub fn start_of_data(&self) -> bool {
self.is_start_of_data
}
pub fn set_data_seen(&mut self) {
self.is_start_of_data = false;
}
#[inline]
pub fn current_word_mem_pos(&self) -> u64 {
let gbt_word_memory_size_bytes: u64 = 10 + self.gbt_word_padding_size_bytes as u64;
let gbt_word_index = (self.gbt_word_counter - 1) as u64; let relative_mem_pos = gbt_word_index * gbt_word_memory_size_bytes;
relative_mem_pos + self.payload_mem_pos
}
#[inline]
pub fn incr_word_count(&mut self) {
self.gbt_word_counter += 1;
}
}