use crate::{
HyperedgeTrait,
Hypergraph,
VertexIndex,
VertexTrait,
core::types::{
AIndexSet,
ARandomState,
},
errors::HypergraphError,
};
impl<V, HE> Hypergraph<V, HE>
where
V: VertexTrait,
HE: HyperedgeTrait,
{
pub fn add_vertex(&mut self, weight: V) -> Result<VertexIndex, HypergraphError<V, HE>> {
if self.vertices.contains_key(&weight) {
return Err(HypergraphError::VertexWeightAlreadyAssigned(weight));
}
self.vertices
.entry(weight)
.or_insert(AIndexSet::with_capacity_and_hasher(
0,
ARandomState::default(),
));
let internal_index = self
.vertices
.get_index_of(&weight)
.ok_or(HypergraphError::VertexWeightNotFound(weight))?;
Ok(self.add_vertex_index(internal_index))
}
}