/* * Copyright 2013 Guidewire Software, Inc. */ package gw.util.perf.objectsize; import java.util.AbstractSet; import java.util.Iterator; /** */ public class UnmodifiableSizeTwoSet<T> extends AbstractSet<T> { private T _o1; private T _o2; public UnmodifiableSizeTwoSet(T o1, T o2) { if (eq(o1, o2)) { _o1 = o1; _o2 = null; } else { _o1 = o1; _o2 = o2; } } @Override public Iterator<T> iterator() { return new Iterator<T>() { private int i = 0; public boolean hasNext() { return i < size(); } public T next() { if (i == 0) { i++; return _o1; } else if (i == 1) { i++; return _o2; } else { throw new RuntimeException("Implementation error."); } } public void remove() { throw new UnsupportedOperationException(); } }; } public boolean contains(Object o) { return eq(o, _o1) || eq(o, _o2); } private static boolean eq(Object o1, Object o2) { return (o1==null ? o2==null : o1.equals(o2)); } @Override public final int size() { return _o2 == null ? 1 : 2; } }