internal SemLink(SemGraph gr, SemObject src, SemObject tgt) { Graph = gr; m_Source = src; m_Target = tgt; src.LinksFrom.Add(this); tgt.LinksTo.Add(this); }
public void RemoveObject(SemObject obj) { foreach (SemLink li in obj.LinksFrom) { if (li.Target.LinksTo.Contains(li)) li.Target.LinksTo.Remove(li); if (Links.Contains(li)) Links.Remove(li); else if (li.Target.Graph.Links.Contains(li)) li.Target.Graph.Links.Remove(li); } foreach (SemLink li in obj.LinksTo) { if (li.Source.LinksFrom.Contains(li)) li.Source.LinksFrom.Remove(li); if (Links.Contains(li)) Links.Remove(li); else if (li.Source.Graph.Links.Contains(li)) li.Source.Graph.Links.Remove(li); } if (Objects.Contains(obj)) Objects.Remove(obj); }
public SemLink AddLink(SemLinkType typ, SemObject src, SemObject tgt, string ques = null, bool or = false, string prep = null) { if (src == null || tgt == null) return null; foreach (SemLink li in src.Graph.Links) { if (li.Typ == typ && li.Source == src && li.Target == tgt) return li; } if (src.Graph != tgt.Graph) { foreach (SemLink li in tgt.Graph.Links) { if (li.Typ == typ && li.Source == src && li.Target == tgt) return li; } } if (tgt.Morph.NormalCase == "ДОМ") { } SemLink res = new SemLink(this, src, tgt) { Typ = typ, Question = ques, IsOr = or, Preposition = prep }; Links.Add(res); return res; }