All Downloads are FREE. Search and download functionalities are using the official Maven repository.

soot.jimple.spark.ondemand.genericutil.Predicate Maven / Gradle / Ivy

package soot.jimple.spark.ondemand.genericutil;

/*-
 * #%L
 * Soot - a J*va Optimization Framework
 * %%
 * Copyright (C) 2007 Manu Sridharan
 * %%
 * This program 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 program 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 General Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public
 * License along with this program.  If not, see
 * .
 * #L%
 */

/**
 * Interface for defining an arbitrary predicate on {@link Object}s.
 */
public abstract class Predicate {
  public static final Predicate FALSE = new Predicate() {

    @Override
    public boolean test(Object obj_) {
      return false;
    }
  };

  public static final Predicate TRUE = FALSE.not();

  @SuppressWarnings("unchecked")
  public static  Predicate truePred() {
    return (Predicate) TRUE;
  }

  @SuppressWarnings("unchecked")
  public static  Predicate falsePred() {
    return (Predicate) FALSE;
  }

  /** Test whether an {@link Object} satisfies this {@link Predicate} */
  public abstract boolean test(T obj_);

  /** Return a predicate that is a negation of this predicate */
  public Predicate not() {
    final Predicate originalPredicate = this;
    return new Predicate() {
      public boolean test(T obj_) {
        return !originalPredicate.test(obj_);
      }
    };
  }

  /**
   * Return a predicate that is a conjunction of this predicate and another predicate
   */
  public Predicate and(final Predicate conjunct_) {
    final Predicate originalPredicate = this;
    return new Predicate() {
      public boolean test(T obj_) {
        return originalPredicate.test(obj_) && conjunct_.test(obj_);
      }
    };
  }

  /**
   * Return a predicate that is a conjunction of this predicate and another predicate
   */
  public Predicate or(final Predicate disjunct_) {
    final Predicate originalPredicate = this;
    return new Predicate() {
      public boolean test(T obj_) {
        return originalPredicate.test(obj_) || disjunct_.test(obj_);
      }
    };
  }
} // class Predicate




© 2015 - 2024 Weber Informatics LLC | Privacy Policy