示例#1
0
 internal SemLink(SemGraph gr, SemObject src, SemObject tgt)
 {
     Graph    = gr;
     m_Source = src;
     m_Target = tgt;
     src.LinksFrom.Add(this);
     tgt.LinksTo.Add(this);
 }
示例#2
0
 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);
 }
示例#3
0
 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;
 }