use indexmap::IndexSet;
use crate::{errors::HypergraphError, HyperedgeTrait, Hypergraph, VertexIndex, VertexTrait};
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(IndexSet::with_capacity(0));
let internal_index = self
.vertices
.get_index_of(&weight)
.ok_or(HypergraphError::VertexWeightNotFound(weight))?;
Ok(self.add_vertex_index(internal_index))
}
}