/* * Either.java * Copyright (C) 2004-2005, Bjorn Bringert (bringert@cs.chalmers.se) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package se.chalmers.cs.gf.util; import java.util.NoSuchElementException; /** * A simple variant type. */ public class Either { private A left; private B right; private boolean isLeft; private Either(A left, B right, boolean isLeft) { this.left = left; this.right = right; this.isLeft = isLeft; } public boolean isLeft() { return isLeft; } public A getLeft() { if (!isLeft) throw new NoSuchElementException("Called getLeft() when there is only a right."); return left; } public B getRight() { if (isLeft) throw new NoSuchElementException("Called getRight() when there is only a left."); return right; } public static Either mkLeft (A x) { return new Either(x, null, true); } public static Either mkRight (B x) { return new Either(null, x, false); } }