001package daikon.diff; 002 003import daikon.inv.Implication; 004import daikon.inv.Invariant; 005import java.util.Comparator; 006import org.checkerframework.dataflow.qual.Pure; 007 008/** 009 * Comparator for pairing invariants. In an invariant in set2 is an implication, its consequent is 010 * used instead of the whole invariant. In set1, the whole invariant is always used. Some examples: 011 * 012 * <pre> 013 * this.compare(A, B⇒A) == c.compare(A, A) 014 * this.compare(C, D) == c.compare(C, D) 015 * </pre> 016 */ 017public class ConsequentPairComparator implements Comparator<Invariant> { 018 019 private Comparator<Invariant> c; 020 021 public ConsequentPairComparator(Comparator<Invariant> c) { 022 this.c = c; 023 } 024 025 @Pure 026 @Override 027 public int compare(Invariant inv1, Invariant inv2) { 028 if (inv2 instanceof Implication) { 029 Implication imp2 = (Implication) inv2; 030 inv2 = imp2.consequent(); 031 } 032 033 return c.compare(inv1, inv2); 034 } 035}