Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 /// <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);
 }