protected boolean findTarget(final ATermAppl term, final ATermAppl target, final Set<ATermAppl> seen) { final List<ATermAppl> queue = new ArrayList<>(); queue.add(term); while (!queue.isEmpty()) { _kb.getTimers().checkTimer("preprocessing"); final ATermAppl current = queue.remove(queue.size() - 1); if (!seen.add(current)) continue; if (current.equals(target)) return true; final TermDefinition td = getTD(current); if (td != null) { // Shortcut if (td.getDependencies().contains(target)) return true; queue.addAll(td.getDependencies()); } } return false; }
protected boolean findTarget(final ATermAppl term, final ATermAppl target, final Set<ATermAppl> seen) { final List<ATermAppl> queue = new ArrayList<>(); queue.add(term); while (!queue.isEmpty()) { _kb.getTimers().checkTimer("preprocessing"); final ATermAppl current = queue.remove(queue.size() - 1); if (!seen.add(current)) continue; if (current.equals(target)) return true; final TermDefinition td = getTD(current); if (td != null) { // Shortcut if (td.getDependencies().contains(target)) return true; queue.addAll(td.getDependencies()); } } return false; }
public boolean addIfUnfoldable(final ATermAppl term) { final ATermAppl name = (ATermAppl) term.getArgument(0); if (!ATermUtils.isPrimitive(name)) return false; TermDefinition td = getTD(name); if (td == null) td = new TermDefinition(); // Basic Check if (!td.isUnique(term)) return false; // Loop Checks final ATermAppl body = (ATermAppl) term.getArgument(1); final Set<ATermAppl> nameDependencies = td.getDependencies(); final Set<ATermAppl> bodyDependencies = ATermUtils.findPrimitives(body); if (!nameDependencies.containsAll(bodyDependencies)) { final Set<ATermAppl> seen = new IdentityHashSet<>(); // Identity hashSet because dependencies are manage on identity hash set for (final ATermAppl current : bodyDependencies) if (findTarget(current, name, seen)) return false; } return addDef(term); }
public boolean addIfUnfoldable(final ATermAppl term) { final ATermAppl name = (ATermAppl) term.getArgument(0); if (!ATermUtils.isPrimitive(name)) return false; TermDefinition td = getTD(name); if (td == null) td = new TermDefinition(); // Basic Check if (!td.isUnique(term)) return false; // Loop Checks final ATermAppl body = (ATermAppl) term.getArgument(1); final Set<ATermAppl> nameDependencies = td.getDependencies(); final Set<ATermAppl> bodyDependencies = ATermUtils.findPrimitives(body); if (!nameDependencies.containsAll(bodyDependencies)) { final Set<ATermAppl> seen = new IdentityHashSet<>(); // Identity hashSet because dependencies are manage on identity hash set for (final ATermAppl current : bodyDependencies) if (findTarget(current, name, seen)) return false; } return addDef(term); }