private MateEdge(MateInterface prevInterface, MateInterface nextInterface, MateEdge?p, MateEdge?n) { this.Prev = prevInterface.Vertex(); this.Next = nextInterface.Vertex(); this.PrevInterface = prevInterface; this.NextInterface = nextInterface; this.PrevLink = p; this.NextLink = n; }
//创建一条边 public static MateEdge?createEdge(MateInterface prev, MateInterface next) { var pv = prev.Vertex(); var nv = next.Vertex(); if (!pv.CanSupport(next) || !nv.CanSupport(prev)) { return(null); } MateInterface?m; MateEdge? temp, newEdge = new MateEdge(prev, next, null, null); newEdge.Mated = (m = pv.Mate(next)) != null; if (pv.FirstEdge == null) //没有表则直接将边设置为firstEdge { pv.FirstEdge = newEdge; } else //有边则找到最后一条以pv为起点的边。将result设置为prevLink { temp = pv.FirstEdge; while (temp.PrevLink != null) { temp = temp.PrevLink; } temp.PrevLink = newEdge; } //下一条边同理 if (nv.FirstEdge == null) { nv.FirstEdge = newEdge; } else { temp = nv.FirstEdge; while (temp.NextLink != null) { temp = temp.NextLink; } temp.NextLink = newEdge; } return(newEdge); }