in src/reader.rs [1091:1127]
fn count_on_tree(&mut self, version: u32) {
if self.blocks.len() >= 2 {
let src_no = 0;
let sink_no = if version < 48 {
self.blocks.len() - 1
} else {
1
};
let edges_count = self.edges.len();
self.edges.push(GcovEdge {
source: sink_no,
destination: src_no,
flags: GCOV_ARC_ON_TREE,
counter: 0,
cycles: 0,
});
let i = match self.blocks[sink_no]
.destination
.binary_search_by(|x| self.edges[*x].destination.cmp(&src_no))
{
Ok(i) => i,
Err(i) => i,
};
self.blocks[sink_no].destination.insert(i, edges_count);
self.blocks[src_no].source.push(edges_count);
let mut visited = FxHashSet::default();
for block_no in 0..self.blocks.len() {
Self::propagate_counts(&self.blocks, &mut self.edges, block_no, None, &mut visited);
}
for edge in self.edges.iter().rev() {
if edge.is_on_tree() {
self.blocks[edge.source].counter += edge.counter;
}
}
}
}