Пример #1
0
 public ISet<DMIElem> traverse(
     ISet<DMIElem> inNodes,
     BoundFork inPatterns,
     boolean infer,
     boolean loop,
     ISet<DMIElem> suggested) {
   if (infer) {
     ISet<DMIElem> ans = new XSetList<DMIElem>(XSetList.AsSet);
     ISet<DMIElem> xV = new XSetList<DMIElem>(XSetList.AsSet);
     for (; ; ) {
       IList<InferredRelationship> inferSet = new XSetList<InferredRelationship>();
       ISet<DMIElem> res = traverse(inNodes, inPatterns, inferSet, suggested);
       ans.merge(res);
       for (int i = 0; i < inferSet.size(); i++) {
         InferredRelationship ifr = inferSet.get(i);
         int cnt = itsConceptMgr.itsGraph.getMaxIndex();
         DMIElem m = itsConceptMgr.enterStatement(ifr.sb, ifr.vb, ifr.ob, false);
         ans.add(m);
         ans.add(ifr.sb);
         ans.add(ifr.ob);
         if (itsConceptMgr.itsGraph.getMaxIndex() > cnt) xV.add(m);
       }
       if (loop && xV.size() > 0) continue;
       break;
     }
     return ans; // xV; only the inferred nodes
   }
   return traverse(inNodes, inPatterns, null, suggested);
 }