fn read_edges + Sized>()

in src/reader.rs [473:517]


    fn read_edges<E: Endian, T: GcovReader<E> + Sized>(
        fun: &mut GcovFunction,
        count: u32,
        reader: &mut T,
    ) -> Result<(), GcovReaderError> {
        let edges = &mut fun.edges;
        let blocks = &mut fun.blocks;
        let count = ((count - 1) / 2) as usize;
        let block_no = reader.read_u32()? as usize;
        if block_no <= blocks.len() {
            blocks[block_no].destination.reserve(count);
            for _ in 0..count {
                let dst_block_no = reader.read_u32()? as usize;
                let flags = reader.read_u32()?;
                let edges_count = edges.len();
                edges.push(GcovEdge {
                    source: block_no,
                    destination: dst_block_no,
                    flags,
                    counter: 0,
                    cycles: 0,
                });
                let i = match blocks[block_no]
                    .destination
                    .binary_search_by(|x| edges[*x].destination.cmp(&dst_block_no))
                {
                    Ok(i) => i,
                    Err(i) => i,
                };
                blocks[block_no].destination.insert(i, edges_count);
                blocks[dst_block_no].source.push(edges_count);
                if (flags & GCOV_ARC_ON_TREE) == 0 {
                    fun.real_edge_count += 1;
                }
            }
        } else {
            return Err(GcovReaderError::Str(format!(
                "Unexpected block number: {} (in {}) in {}",
                block_no,
                fun.name,
                reader.get_stem()
            )));
        }
        Ok(())
    }