@Override public Op transform(OpProject op, Op subOp) { Op result = subOp instanceof OpProject ? new OpProject(((OpProject)subOp).getSubOp(), op.getVars()) : new OpProject(subOp, op.getVars()) ; return result; // List<Var> vars; // if(subOp instanceof OpProject) { // OpProject x = (OpProject)subOp; // Set<Var> vs = new LinkedHashSet<>(op.getVars()); // vs.addAll(x.getVars()); // // vars = new ArrayList<Var>(vs); // } else { // result = new OpProj // } // ? new // : null; // // new OpProject() // // return super.transform(opProject, subOp); }
@Override public Op transform(OpProject opProject, Op subOp) { if (!opProject.getVars().contains(this.var)) return super.transform(opProject, subOp); List<Var> newVars = new ArrayList<>(opProject.getVars()); newVars.remove(this.var); if (this.topmostOnly) { if (this.aboveExtend) { return new OpProject(subOp, newVars); } else { return opProject; } } else { return new OpProject(subOp, newVars); } } }
public Op transform1(OpDistinct opDistinct, Op subOp) { if (subOp instanceof OpProject) { OpProject opProject = (OpProject) subOp; if (opProject.getSubOp() instanceof OpOrder) { OpOrder opOrder = (OpOrder) opProject.getSubOp(); Set<Var> projectVars = new HashSet<>(opProject.getVars()) ; if (isSafe(projectVars, opOrder)) { return OpReduced.create(subOp); } } } return super.transform(opDistinct, subOp); }
public static Collection<ProblemNeighborhoodAware<Map<Var, Var>, Var>> deriveProblemsProject(OpProject cacheOp, OpProject userOp) { ProblemNeighborhoodAware<Map<Var, Var>, Var> tmp = deriveProblem(cacheOp.getVars(), userOp.getVars()); Collection<ProblemNeighborhoodAware<Map<Var, Var>, Var>> result = Collections.singleton(tmp); return result; }
@Override public Op1 copy(Op subOp) { return new OpProject(subOp, vars) ; }
@Override public int hashCode() { return vars.hashCode() ^ getSubOp().hashCode() ; }
@Override public void visit(OpProject op) { before(op) ; if ( opVisitor != null ) op.visit(opVisitor); // Skip inner. after(op) ; }
@Override public void visit(OpProject opProject) { List<Var> vars = opProject.getVars(); VarUsageVisitor subUsage = VarUsageVisitor.apply(opProject.getSubOp()); subUsage.defines.retainAll(vars); subUsage.optDefines.retainAll(vars); subUsage.filterMentions.retainAll(vars) ; subUsage.filterMentionsOnly.retainAll(vars) ; subUsage.assignMentions.retainAll(vars) ; defines.addAll(subUsage.defines); optDefines.addAll(subUsage.optDefines); filterMentions.addAll(subUsage.filterMentions); filterMentionsOnly.addAll(subUsage.filterMentionsOnly); assignMentions.addAll(subUsage.assignMentions); }
@Override public void visit(OpProject op) { List<Var> opVars = op.getVars(); // Remove all vars except for the projected ones Set<Var> removals = new HashSet<>(varDeps.keySet()); removals.removeAll(opVars); removals.forEach(varDeps::removeAll); }
public static Op project(Op op, Iterable<Var> vars) { List<Var> varList = Lists.newArrayList(vars); // new // ArrayList<Var>(vars); Op result = new OpProject(op, varList); return result; }
@Override public void visit(OpProject op) { List<Var> opVars = op.getVars(); // Remove all vars except for the projected ones Set<Var> removals = new HashSet<>(varDeps.keySet()); removals.removeAll(opVars); removals.forEach(varDeps::removeAll); }
public static Op project(Op op, Iterable<Var> vars) { List<Var> varList = Lists.newArrayList(vars); // new // ArrayList<Var>(vars); Op result = new OpProject(op, varList); return result; }
@Override public void visit(OpProject op) { op.getSubOp().visit(this); }