fn count_on_tree()

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;
                }
            }
        }
    }