package org.checkerframework.javacutil; /*>>> import org.checkerframework.dataflow.qual.Pure; import org.checkerframework.dataflow.qual.SideEffectFree; */ /** * Simple pair class for multiple returns. * * TODO: as class is immutable, use @Covariant annotation. */ public class Pair<V1, V2> { public final V1 first; public final V2 second; private Pair(V1 v1, V2 v2) { this.first = v1; this.second = v2; } public static <V1, V2> Pair<V1, V2> of(V1 v1, V2 v2) { return new Pair<V1, V2>(v1, v2); } /*@SideEffectFree*/ @Override public String toString() { return "Pair(" + first + ", " + second + ")"; } private int hashCode = -1; /*@Pure*/ @Override public int hashCode() { if (hashCode == -1) { hashCode = 31; if (first != null) hashCode += 17 * first.hashCode(); if (second != null) hashCode += 17 * second.hashCode(); } return hashCode; } @Override public boolean equals(Object o) { if (!(o instanceof Pair)) return false; @SuppressWarnings("unchecked") Pair<V1, V2> other = (Pair<V1, V2>) o; if (this.first == null) { if (other.first != null) return false; } else { if (!this.first.equals(other.first)) return false; } if (this.second == null) { if (other.second != null) return false; } else { if (!this.second.equals(other.second)) return false; } return true; } }