// ============================================================================
// $Id: UnaryNegate.java,v 1.14 2006/08/07 03:56:27 davidahall Exp $
// Copyright (c) 2002-2005 David A. Hall
// ============================================================================
// The contents of this file are subject to the Common Development and
// Distribution License (CDDL), Version 1.0 (the License); you may not use this
// file except in compliance with the License. You should have received a copy
// of the the License along with this file: if not, a copy of the License is
// available from Sun Microsystems, Inc.
//
// http://www.sun.com/cddl/cddl.html
//
// From time to time, the license steward (initially Sun Microsystems, Inc.) may
// publish revised and/or new versions of the License. You may not use,
// distribute, or otherwise make this file available under subsequent versions
// of the License.
//
// Alternatively, the contents of this file may be used under the terms of the
// GNU Lesser General Public License Version 2.1 or later (the "LGPL"), in which
// case the provisions of the LGPL are applicable instead of those above. If you
// wish to allow use of your version of this file only under the terms of the
// LGPL, and not to allow others to use your version of this file under the
// terms of the CDDL, indicate your decision by deleting the provisions above
// and replace them with the notice and other provisions required by the LGPL.
// If you do not delete the provisions above, a recipient may use your version
// of this file under the terms of either the CDDL or the LGPL.
//
// 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.
// ============================================================================
package net.sf.jga.fn.logical;
import net.sf.jga.fn.UnaryPredicate;
import net.sf.jga.fn.UnaryFunctor;
/**
* Unary Predicate that logically negates the result of a child predicate.
* Returns true when child predicate <b>p</b> returns false given object
* argument <b>x</b>.
* <p>
* Copyright © 2002-2005 David A. Hall
*
* @author <a href="mailto:davidahall@users.sourceforge.net">David A. Hall</a>
**/
public class UnaryNegate<T> extends UnaryPredicate<T> {
static final long serialVersionUID = -722445812960547108L;
private UnaryFunctor<? super T, Boolean> _p;
/**
* Builds a UnaryNegate predicate wrapping the given Unary Predicate.
* @throws IllegalArgumentException when no child predicate is given
*/
public UnaryNegate(UnaryFunctor<? super T, Boolean> p) {
if (p == null) {
throw new IllegalArgumentException("Child Predicate may not be null");
}
_p = p;
}
/**
* Returns the child predicate.
* @return the child predicate.
*/
public UnaryFunctor<? super T,Boolean> getPredicate() { return _p; }
// UnaryPredicate interface
/**
* Given argument <b>x</b>, returns true when child
* predicate <b>p</b> returns false for x, otherwise returns true.
*
* @return !(p.p(x))
*/
public Boolean fn(T x) {
return ! _p.fn(x);
}
/**
* Calls the Visitor's <code>visit(UnaryNegate)</code> method, if it
* implements the nested Visitor interface.
*/
public void accept(net.sf.jga.fn.Visitor v) {
if (v instanceof UnaryNegate.Visitor)
((UnaryNegate.Visitor)v).visit(this);
else
v.visit(this);
}
// Object overrides
public String toString() {
return "UnaryNegate";
}
// Acyclic Visitor
/**
* Interface for classes that may interpret a <b>UnaryNegate</b>
* predicate.
*/
public interface Visitor extends net.sf.jga.fn.Visitor {
public void visit(UnaryNegate host);
}
}
|