EdgeId NewEdgeId(Graph g) { Range <EdgeId> range; EdgeId eId = 1; switch (EdgeRanges.Count) { case 0: range = new Range <EdgeId>(1, 1); EdgeRanges.Add(range); break; case 1: range = EdgeRanges.First(); if (range.Min == 1) { eId = range.Max + 1; range = new Range <EdgeId>(1, eId); } else { eId = range.Min - 1; range = new Range <EdgeId>(eId, range.Max); } EdgeRanges[0] = range; break; default: { range = EdgeRanges.First(); if (range.Min > 1) { eId = range.Min - 1; range = new Range <EdgeId>(eId, range.Max); EdgeRanges[0] = range; } else { Range <VertexId> nextRange = EdgeRanges[1]; if (range.Max + 2 == nextRange.Min) { EdgeRanges.RemoveAt(1); eId = range.Max + 1; range = new Range <EdgeId>(range.Min, nextRange.Max); EdgeRanges[0] = range; } else { eId = range.Max + 1; range = new Range <EdgeId>(range.Min, eId); EdgeRanges[0] = range; } } } break; } return(eId); }
/// <inheritdoc /> public override void Unpersist(SessionBase session) { if (IsPersistent == false) { return; } if (m_unrestrictedEdges != null) { m_unrestrictedEdges.Unpersist(session); } if (m_restrictedEdges != null) { m_restrictedEdges.Unpersist(session); } m_stringToPropertyType.Unpersist(session); EdgeRanges.Unpersist(session); base.Unpersist(session); MyGraph.RemoveEdgeTypeRef(this); }