#![cfg(feature = "alloc")]
use alloc::vec::Vec;
use crate::{
impls::{CSR2D, SquareCSR2D, SymmetricCSR2D, UpperTriangularCSR2D},
naive_structs::GenericUndirectedMonopartiteEdgesBuilder,
traits::EdgesBuilder,
};
type InternalUndiBuilder<I> = GenericUndirectedMonopartiteEdgesBuilder<
I,
UpperTriangularCSR2D<CSR2D<usize, usize, usize>>,
SymmetricCSR2D<CSR2D<usize, usize, usize>>,
>;
#[inline]
pub(crate) fn build_symmetric(
n: usize,
edges: Vec<(usize, usize)>,
) -> SymmetricCSR2D<CSR2D<usize, usize, usize>> {
let num_edges = edges.len();
InternalUndiBuilder::default()
.expected_number_of_edges(num_edges)
.expected_shape(n)
.edges(edges.into_iter())
.build()
.unwrap()
}
type InternalDiBuilder<I> =
crate::naive_structs::GenericEdgesBuilder<I, SquareCSR2D<CSR2D<usize, usize, usize>>>;
#[inline]
pub(crate) fn build_directed(
n: usize,
edges: Vec<(usize, usize)>,
) -> SquareCSR2D<CSR2D<usize, usize, usize>> {
let num_edges = edges.len();
InternalDiBuilder::default()
.expected_number_of_edges(num_edges)
.expected_shape(n)
.edges(edges.into_iter())
.build()
.unwrap()
}