public void merge(EquivalenceClass ec2) { members.addAll(ec2.getMembers()); if (!representativeIsConst && ec2.representativeIsConst()) { representativeIsConst = true; constRepresentative = ec2.getConstRepresentative(); } expressionMembers.addAll(ec2.getExpressionMembers()); }
private final static void getFDsAndEquivClassesForEqWithConstant(ConstantExpression c, VariableReferenceExpression v, Collection<FunctionalDependency> fds, Map<LogicalVariable, EquivalenceClass> equivClasses) { LogicalVariable var = v.getVariableReference(); LinkedList<LogicalVariable> head = new LinkedList<LogicalVariable>(); // empty set in the head LinkedList<LogicalVariable> tail = new LinkedList<LogicalVariable>(); tail.add(var); FunctionalDependency fd = new FunctionalDependency(head, tail); fds.add(fd); EquivalenceClass ec = equivClasses.get(var); if (ec == null) { LinkedList<LogicalVariable> members = new LinkedList<LogicalVariable>(); members.add(var); EquivalenceClass eclass = new EquivalenceClass(members, c); equivClasses.put(var, eclass); } else { if (ec.representativeIsConst()) { ILogicalExpression c1 = ec.getConstRepresentative(); if (!c1.equals(c)) { // here I could also rewrite to FALSE return; } } ec.setConstRepresentative(c); } }
@Override public boolean equals(Object obj) { if (!(obj instanceof EquivalenceClass)) { return false; } else { EquivalenceClass ec = (EquivalenceClass) obj; if (!members.equals(ec.getMembers())) { return false; } if (!expressionMembers.equals(ec.getExpressionMembers())) { return false; } if (representativeIsConst) { return ec.representativeIsConst() && (constRepresentative.equals(ec.getConstRepresentative())); } else { return !ec.representativeIsConst() && (variableRepresentative.equals(ec.getVariableRepresentative())); } } } }
nc = new EquivalenceClass(m, oc.getConstRepresentative()); } else if (m.contains(oc.getVariableRepresentative())) { nc = new EquivalenceClass(m, oc.getVariableRepresentative());