/*
* BinaryPredicates.java
*
* Copyright (C) 2010 Leo Osvald <leo.osvald@gmail.com>
*
* This file is part of YOUR PROGRAM NAME.
*
* YOUR PROGRAM NAME is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* YOUR PROGRAM NAME 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 Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with YOUR PROGRAM NAME. If not, see <http://www.gnu.org/licenses/>.
*/
package org.sglj.math;
import org.sglj.math.BinaryPredicate.BooleanBinaryPredicate;
import org.sglj.math.BinaryPredicate.ByteBinaryPredicate;
import org.sglj.math.BinaryPredicate.CharBinaryPredicate;
import org.sglj.math.BinaryPredicate.DoubleBinaryPredicate;
import org.sglj.math.BinaryPredicate.FloatBinaryPredicate;
import org.sglj.math.BinaryPredicate.IntBinaryPredicate;
import org.sglj.math.BinaryPredicate.LongBinaryPredicate;
import org.sglj.math.BinaryPredicate.ShortBinaryPredicate;
import org.sglj.math.BinaryPredicate.TypeBinaryPredicate;
/**
* Utility class for {@link BinaryPredicate}.
*
* @author Leo Osvald
*
*/
public final class BinaryPredicates {
// disable instantiation
private BinaryPredicates() { }
// tmp_file="/tmp/tmp"; xsel > "$tmp_file"; types="Boolean Byte Char Short Long Float Double Type"; prim="boolean byte char short long float double T"; ucase_prim="BOOLEAN BYTE CHAR SHORT LONG FLOAT DOUBLE TYPE"; types_arr=($types); prim_arr=($prim); ucase_prim_arr=($ucase_prim); echo "" > "$tmp_file"2; for ((i=0;i<7;++i)); do t=${types_arr[i]}; p=${prim_arr[i]}; prim_file=/tmp/$p; cat "$tmp_file" | sed 's/int\( \|s\)/'$p'\1/g' | sed 's/Int/'$t'/g' | sed 's/INT/'${ucase_prim_arr[i]}'/g' | sed 's/TypeBinaryPredicate/&<T>/g' >> "$tmp_file"2; echo -e "\n\n" >> "$tmp_file"2; done; cat "$tmp_file"2 | xsel -b
// BEGIN HAND-CODED
public static final class TypeBinaryPredicates {
// disable instantiation
private TypeBinaryPredicates() { }
/**
* Returns the negated predicate.
* @param binaryPredicate predicate which negation should be returned
* @return the negated predicate
*/
public static <T> TypeBinaryPredicate<T> not(
final TypeBinaryPredicate<T> binaryPredicate) {
return new TypeBinaryPredicate<T>() {
@Override
public boolean holds(T a, T b) {
return binaryPredicate.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff both specified predicate hold.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "and" operation
*/
public static <T> TypeBinaryPredicate<T> and(
final TypeBinaryPredicate<T> binaryPredicate1,
final TypeBinaryPredicate<T> binaryPredicate2) {
return new TypeBinaryPredicate<T>() {
@Override
public boolean holds(T a, T b) {
return binaryPredicate1.holds(a, b)
&& binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff any of the specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "or" operation
*/
public static <T> TypeBinaryPredicate<T> or(
final TypeBinaryPredicate<T> binaryPredicate1,
final TypeBinaryPredicate<T> binaryPredicate2) {
return new TypeBinaryPredicate<T>() {
@Override
public boolean holds(T a, T b) {
return binaryPredicate1.holds(a, b)
|| binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff exactly one specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "xor" operation
*/
public static <T> TypeBinaryPredicate<T> xor(
final TypeBinaryPredicate<T> binaryPredicate1,
final TypeBinaryPredicate<T> binaryPredicate2) {
return new TypeBinaryPredicate<T>() {
@Override
public boolean holds(T a, T b) {
return binaryPredicate1.holds(a, b)
^ binaryPredicate2.holds(a, b);
}
};
}
}
// BEGIN XSEL
public static final class IntBinaryPredicates {
// disable instantiation
public IntBinaryPredicates() { }
/**
* A binary predicate representing the equal relation (==)
* between two ints.
* @see IntBinaryPredicate
*/
public static final IntBinaryPredicate EQUAL_INT
= new IntBinaryPredicate() {
@Override
public boolean holds(int a, int b) {
return a == b;
}
};
/**
* A binary predicate representing the not equal relation (!=)
* between two ints.
* @see IntBinaryPredicate
*/
public static final IntBinaryPredicate NOT_EQUAL_INT
= new IntBinaryPredicate() {
@Override
public boolean holds(int a, int b) {
return a != b;
}
};
/**
* A binary predicate representing the less than relation (<)
* between two ints.
* @see IntBinaryPredicate
*/
public static final IntBinaryPredicate LESS_INT
= new IntBinaryPredicate() {
@Override
public boolean holds(int a, int b) {
return a < b;
}
};
/**
* A binary predicate representing the greater than relation (>)
* between two ints.
* @see IntBinaryPredicate
*/
public static final IntBinaryPredicate GREATER_INT
= new IntBinaryPredicate() {
@Override
public boolean holds(int a, int b) {
return a > b;
}
};
/**
* A binary predicate representing the less than or equal to relation (<=)
* between two ints.
* @see IntBinaryPredicate
*/
public static final IntBinaryPredicate LESS_OR_EQUAL_INT
= new IntBinaryPredicate() {
@Override
public boolean holds(int a, int b) {
return a <= b;
}
};
/**
* A binary predicate representing the greater or equal to relation (>=)
* between two ints.
* @see IntBinaryPredicate
*/
public static final IntBinaryPredicate GREATER_OR_EQUAL_INT
= new IntBinaryPredicate() {
@Override
public boolean holds(int a, int b) {
return a >= b;
}
};
/**
* Returns the negated predicate.
* @param binaryPredicate predicate which negation should be returned
* @return the negated predicate
*/
public static IntBinaryPredicate not(
final IntBinaryPredicate binaryPredicate) {
return new IntBinaryPredicate() {
@Override
public boolean holds(int a, int b) {
return binaryPredicate.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff both specified predicate hold.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "and" operation
*/
public static IntBinaryPredicate and(
final IntBinaryPredicate binaryPredicate1,
final IntBinaryPredicate binaryPredicate2) {
return new IntBinaryPredicate() {
@Override
public boolean holds(int a, int b) {
return binaryPredicate1.holds(a, b)
&& binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff any of the specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "or" operation
*/
public static IntBinaryPredicate or(
final IntBinaryPredicate binaryPredicate1,
final IntBinaryPredicate binaryPredicate2) {
return new IntBinaryPredicate() {
@Override
public boolean holds(int a, int b) {
return binaryPredicate1.holds(a, b)
|| binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff exactly one specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "xor" operation
*/
public static IntBinaryPredicate xor(
final IntBinaryPredicate binaryPredicate1,
final IntBinaryPredicate binaryPredicate2) {
return new IntBinaryPredicate() {
@Override
public boolean holds(int a, int b) {
return binaryPredicate1.holds(a, b)
^ binaryPredicate2.holds(a, b);
}
};
}
}
// END XSEL
// END HAND-CODED
public static final class BooleanBinaryPredicates {
// disable instantiation
public BooleanBinaryPredicates() { }
/**
* A binary predicate representing the equal relation (==)
* between two booleans.
* @see BooleanBinaryPredicate
*/
public static final BooleanBinaryPredicate EQUAL_BOOLEAN
= new BooleanBinaryPredicate() {
@Override
public boolean holds(boolean a, boolean b) {
return a == b;
}
};
/**
* A binary predicate representing the not equal relation (!=)
* between two booleans.
* @see BooleanBinaryPredicate
*/
public static final BooleanBinaryPredicate NOT_EQUAL_BOOLEAN
= new BooleanBinaryPredicate() {
@Override
public boolean holds(boolean a, boolean b) {
return a != b;
}
};
/**
* A binary predicate representing the less than relation (<)
* between two booleans.
* @see BooleanBinaryPredicate
*/
public static final BooleanBinaryPredicate LESS_BOOLEAN
= new BooleanBinaryPredicate() {
@Override
public boolean holds(boolean a, boolean b) {
return !a && b;
}
};
/**
* A binary predicate representing the greater than relation (>)
* between two booleans.
* @see BooleanBinaryPredicate
*/
public static final BooleanBinaryPredicate GREATER_BOOLEAN
= new BooleanBinaryPredicate() {
@Override
public boolean holds(boolean a, boolean b) {
return a && !b;
}
};
/**
* A binary predicate representing the less than or equal to relation (<=)
* between two booleans.
* @see BooleanBinaryPredicate
*/
public static final BooleanBinaryPredicate LESS_OR_EQUAL_BOOLEAN
= new BooleanBinaryPredicate() {
@Override
public boolean holds(boolean a, boolean b) {
return !(a && !b);
}
};
/**
* A binary predicate representing the greater or equal to relation (>=)
* between two booleans.
* @see BooleanBinaryPredicate
*/
public static final BooleanBinaryPredicate GREATER_OR_EQUAL_BOOLEAN
= new BooleanBinaryPredicate() {
@Override
public boolean holds(boolean a, boolean b) {
return !(!a && b);
}
};
/**
* Returns the negated predicate.
* @param binaryPredicate predicate which negation should be returned
* @return the negated predicate
*/
public static BooleanBinaryPredicate not(
final BooleanBinaryPredicate binaryPredicate) {
return new BooleanBinaryPredicate() {
@Override
public boolean holds(boolean a, boolean b) {
return binaryPredicate.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff both specified predicate hold.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "and" operation
*/
public static BooleanBinaryPredicate and(
final BooleanBinaryPredicate binaryPredicate1,
final BooleanBinaryPredicate binaryPredicate2) {
return new BooleanBinaryPredicate() {
@Override
public boolean holds(boolean a, boolean b) {
return binaryPredicate1.holds(a, b)
&& binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff any of the specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "or" operation
*/
public static BooleanBinaryPredicate or(
final BooleanBinaryPredicate binaryPredicate1,
final BooleanBinaryPredicate binaryPredicate2) {
return new BooleanBinaryPredicate() {
@Override
public boolean holds(boolean a, boolean b) {
return binaryPredicate1.holds(a, b)
|| binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff exactly one specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "xor" operation
*/
public static BooleanBinaryPredicate xor(
final BooleanBinaryPredicate binaryPredicate1,
final BooleanBinaryPredicate binaryPredicate2) {
return new BooleanBinaryPredicate() {
@Override
public boolean holds(boolean a, boolean b) {
return binaryPredicate1.holds(a, b)
^ binaryPredicate2.holds(a, b);
}
};
}
}
public static final class ByteBinaryPredicates {
// disable instantiation
public ByteBinaryPredicates() { }
/**
* A binary predicate representing the equal relation (==)
* between two bytes.
* @see ByteBinaryPredicate
*/
public static final ByteBinaryPredicate EQUAL_BYTE
= new ByteBinaryPredicate() {
@Override
public boolean holds(byte a, byte b) {
return a == b;
}
};
/**
* A binary predicate representing the not equal relation (!=)
* between two bytes.
* @see ByteBinaryPredicate
*/
public static final ByteBinaryPredicate NOT_EQUAL_BYTE
= new ByteBinaryPredicate() {
@Override
public boolean holds(byte a, byte b) {
return a != b;
}
};
/**
* A binary predicate representing the less than relation (<)
* between two bytes.
* @see ByteBinaryPredicate
*/
public static final ByteBinaryPredicate LESS_BYTE
= new ByteBinaryPredicate() {
@Override
public boolean holds(byte a, byte b) {
return a < b;
}
};
/**
* A binary predicate representing the greater than relation (>)
* between two bytes.
* @see ByteBinaryPredicate
*/
public static final ByteBinaryPredicate GREATER_BYTE
= new ByteBinaryPredicate() {
@Override
public boolean holds(byte a, byte b) {
return a > b;
}
};
/**
* A binary predicate representing the less than or equal to relation (<=)
* between two bytes.
* @see ByteBinaryPredicate
*/
public static final ByteBinaryPredicate LESS_OR_EQUAL_BYTE
= new ByteBinaryPredicate() {
@Override
public boolean holds(byte a, byte b) {
return a <= b;
}
};
/**
* A binary predicate representing the greater or equal to relation (>=)
* between two bytes.
* @see ByteBinaryPredicate
*/
public static final ByteBinaryPredicate GREATER_OR_EQUAL_BYTE
= new ByteBinaryPredicate() {
@Override
public boolean holds(byte a, byte b) {
return a >= b;
}
};
/**
* Returns the negated predicate.
* @param binaryPredicate predicate which negation should be returned
* @return the negated predicate
*/
public static ByteBinaryPredicate not(
final ByteBinaryPredicate binaryPredicate) {
return new ByteBinaryPredicate() {
@Override
public boolean holds(byte a, byte b) {
return binaryPredicate.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff both specified predicate hold.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "and" operation
*/
public static ByteBinaryPredicate and(
final ByteBinaryPredicate binaryPredicate1,
final ByteBinaryPredicate binaryPredicate2) {
return new ByteBinaryPredicate() {
@Override
public boolean holds(byte a, byte b) {
return binaryPredicate1.holds(a, b)
&& binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff any of the specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "or" operation
*/
public static ByteBinaryPredicate or(
final ByteBinaryPredicate binaryPredicate1,
final ByteBinaryPredicate binaryPredicate2) {
return new ByteBinaryPredicate() {
@Override
public boolean holds(byte a, byte b) {
return binaryPredicate1.holds(a, b)
|| binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff exactly one specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "xor" operation
*/
public static ByteBinaryPredicate xor(
final ByteBinaryPredicate binaryPredicate1,
final ByteBinaryPredicate binaryPredicate2) {
return new ByteBinaryPredicate() {
@Override
public boolean holds(byte a, byte b) {
return binaryPredicate1.holds(a, b)
^ binaryPredicate2.holds(a, b);
}
};
}
}
public static final class CharBinaryPredicates {
// disable instantiation
public CharBinaryPredicates() { }
/**
* A binary predicate representing the equal relation (==)
* between two chars.
* @see CharBinaryPredicate
*/
public static final CharBinaryPredicate EQUAL_CHAR
= new CharBinaryPredicate() {
@Override
public boolean holds(char a, char b) {
return a == b;
}
};
/**
* A binary predicate representing the not equal relation (!=)
* between two chars.
* @see CharBinaryPredicate
*/
public static final CharBinaryPredicate NOT_EQUAL_CHAR
= new CharBinaryPredicate() {
@Override
public boolean holds(char a, char b) {
return a != b;
}
};
/**
* A binary predicate representing the less than relation (<)
* between two chars.
* @see CharBinaryPredicate
*/
public static final CharBinaryPredicate LESS_CHAR
= new CharBinaryPredicate() {
@Override
public boolean holds(char a, char b) {
return a < b;
}
};
/**
* A binary predicate representing the greater than relation (>)
* between two chars.
* @see CharBinaryPredicate
*/
public static final CharBinaryPredicate GREATER_CHAR
= new CharBinaryPredicate() {
@Override
public boolean holds(char a, char b) {
return a > b;
}
};
/**
* A binary predicate representing the less than or equal to relation (<=)
* between two chars.
* @see CharBinaryPredicate
*/
public static final CharBinaryPredicate LESS_OR_EQUAL_CHAR
= new CharBinaryPredicate() {
@Override
public boolean holds(char a, char b) {
return a <= b;
}
};
/**
* A binary predicate representing the greater or equal to relation (>=)
* between two chars.
* @see CharBinaryPredicate
*/
public static final CharBinaryPredicate GREATER_OR_EQUAL_CHAR
= new CharBinaryPredicate() {
@Override
public boolean holds(char a, char b) {
return a >= b;
}
};
/**
* Returns the negated predicate.
* @param binaryPredicate predicate which negation should be returned
* @return the negated predicate
*/
public static CharBinaryPredicate not(
final CharBinaryPredicate binaryPredicate) {
return new CharBinaryPredicate() {
@Override
public boolean holds(char a, char b) {
return binaryPredicate.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff both specified predicate hold.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "and" operation
*/
public static CharBinaryPredicate and(
final CharBinaryPredicate binaryPredicate1,
final CharBinaryPredicate binaryPredicate2) {
return new CharBinaryPredicate() {
@Override
public boolean holds(char a, char b) {
return binaryPredicate1.holds(a, b)
&& binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff any of the specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "or" operation
*/
public static CharBinaryPredicate or(
final CharBinaryPredicate binaryPredicate1,
final CharBinaryPredicate binaryPredicate2) {
return new CharBinaryPredicate() {
@Override
public boolean holds(char a, char b) {
return binaryPredicate1.holds(a, b)
|| binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff exactly one specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "xor" operation
*/
public static CharBinaryPredicate xor(
final CharBinaryPredicate binaryPredicate1,
final CharBinaryPredicate binaryPredicate2) {
return new CharBinaryPredicate() {
@Override
public boolean holds(char a, char b) {
return binaryPredicate1.holds(a, b)
^ binaryPredicate2.holds(a, b);
}
};
}
}
public static final class ShortBinaryPredicates {
// disable instantiation
public ShortBinaryPredicates() { }
/**
* A binary predicate representing the equal relation (==)
* between two shorts.
* @see ShortBinaryPredicate
*/
public static final ShortBinaryPredicate EQUAL_SHORT
= new ShortBinaryPredicate() {
@Override
public boolean holds(short a, short b) {
return a == b;
}
};
/**
* A binary predicate representing the not equal relation (!=)
* between two shorts.
* @see ShortBinaryPredicate
*/
public static final ShortBinaryPredicate NOT_EQUAL_SHORT
= new ShortBinaryPredicate() {
@Override
public boolean holds(short a, short b) {
return a != b;
}
};
/**
* A binary predicate representing the less than relation (<)
* between two shorts.
* @see ShortBinaryPredicate
*/
public static final ShortBinaryPredicate LESS_SHORT
= new ShortBinaryPredicate() {
@Override
public boolean holds(short a, short b) {
return a < b;
}
};
/**
* A binary predicate representing the greater than relation (>)
* between two shorts.
* @see ShortBinaryPredicate
*/
public static final ShortBinaryPredicate GREATER_SHORT
= new ShortBinaryPredicate() {
@Override
public boolean holds(short a, short b) {
return a > b;
}
};
/**
* A binary predicate representing the less than or equal to relation (<=)
* between two shorts.
* @see ShortBinaryPredicate
*/
public static final ShortBinaryPredicate LESS_OR_EQUAL_SHORT
= new ShortBinaryPredicate() {
@Override
public boolean holds(short a, short b) {
return a <= b;
}
};
/**
* A binary predicate representing the greater or equal to relation (>=)
* between two shorts.
* @see ShortBinaryPredicate
*/
public static final ShortBinaryPredicate GREATER_OR_EQUAL_SHORT
= new ShortBinaryPredicate() {
@Override
public boolean holds(short a, short b) {
return a >= b;
}
};
/**
* Returns the negated predicate.
* @param binaryPredicate predicate which negation should be returned
* @return the negated predicate
*/
public static ShortBinaryPredicate not(
final ShortBinaryPredicate binaryPredicate) {
return new ShortBinaryPredicate() {
@Override
public boolean holds(short a, short b) {
return binaryPredicate.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff both specified predicate hold.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "and" operation
*/
public static ShortBinaryPredicate and(
final ShortBinaryPredicate binaryPredicate1,
final ShortBinaryPredicate binaryPredicate2) {
return new ShortBinaryPredicate() {
@Override
public boolean holds(short a, short b) {
return binaryPredicate1.holds(a, b)
&& binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff any of the specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "or" operation
*/
public static ShortBinaryPredicate or(
final ShortBinaryPredicate binaryPredicate1,
final ShortBinaryPredicate binaryPredicate2) {
return new ShortBinaryPredicate() {
@Override
public boolean holds(short a, short b) {
return binaryPredicate1.holds(a, b)
|| binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff exactly one specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "xor" operation
*/
public static ShortBinaryPredicate xor(
final ShortBinaryPredicate binaryPredicate1,
final ShortBinaryPredicate binaryPredicate2) {
return new ShortBinaryPredicate() {
@Override
public boolean holds(short a, short b) {
return binaryPredicate1.holds(a, b)
^ binaryPredicate2.holds(a, b);
}
};
}
}
public static final class LongBinaryPredicates {
// disable instantiation
public LongBinaryPredicates() { }
/**
* A binary predicate representing the equal relation (==)
* between two longs.
* @see LongBinaryPredicate
*/
public static final LongBinaryPredicate EQUAL_LONG
= new LongBinaryPredicate() {
@Override
public boolean holds(long a, long b) {
return a == b;
}
};
/**
* A binary predicate representing the not equal relation (!=)
* between two longs.
* @see LongBinaryPredicate
*/
public static final LongBinaryPredicate NOT_EQUAL_LONG
= new LongBinaryPredicate() {
@Override
public boolean holds(long a, long b) {
return a != b;
}
};
/**
* A binary predicate representing the less than relation (<)
* between two longs.
* @see LongBinaryPredicate
*/
public static final LongBinaryPredicate LESS_LONG
= new LongBinaryPredicate() {
@Override
public boolean holds(long a, long b) {
return a < b;
}
};
/**
* A binary predicate representing the greater than relation (>)
* between two longs.
* @see LongBinaryPredicate
*/
public static final LongBinaryPredicate GREATER_LONG
= new LongBinaryPredicate() {
@Override
public boolean holds(long a, long b) {
return a > b;
}
};
/**
* A binary predicate representing the less than or equal to relation (<=)
* between two longs.
* @see LongBinaryPredicate
*/
public static final LongBinaryPredicate LESS_OR_EQUAL_LONG
= new LongBinaryPredicate() {
@Override
public boolean holds(long a, long b) {
return a <= b;
}
};
/**
* A binary predicate representing the greater or equal to relation (>=)
* between two longs.
* @see LongBinaryPredicate
*/
public static final LongBinaryPredicate GREATER_OR_EQUAL_LONG
= new LongBinaryPredicate() {
@Override
public boolean holds(long a, long b) {
return a >= b;
}
};
/**
* Returns the negated predicate.
* @param binaryPredicate predicate which negation should be returned
* @return the negated predicate
*/
public static LongBinaryPredicate not(
final LongBinaryPredicate binaryPredicate) {
return new LongBinaryPredicate() {
@Override
public boolean holds(long a, long b) {
return binaryPredicate.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff both specified predicate hold.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "and" operation
*/
public static LongBinaryPredicate and(
final LongBinaryPredicate binaryPredicate1,
final LongBinaryPredicate binaryPredicate2) {
return new LongBinaryPredicate() {
@Override
public boolean holds(long a, long b) {
return binaryPredicate1.holds(a, b)
&& binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff any of the specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "or" operation
*/
public static LongBinaryPredicate or(
final LongBinaryPredicate binaryPredicate1,
final LongBinaryPredicate binaryPredicate2) {
return new LongBinaryPredicate() {
@Override
public boolean holds(long a, long b) {
return binaryPredicate1.holds(a, b)
|| binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff exactly one specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "xor" operation
*/
public static LongBinaryPredicate xor(
final LongBinaryPredicate binaryPredicate1,
final LongBinaryPredicate binaryPredicate2) {
return new LongBinaryPredicate() {
@Override
public boolean holds(long a, long b) {
return binaryPredicate1.holds(a, b)
^ binaryPredicate2.holds(a, b);
}
};
}
}
public static final class FloatBinaryPredicates {
// disable instantiation
public FloatBinaryPredicates() { }
/**
* A binary predicate representing the equal relation (==)
* between two floats.
* @see FloatBinaryPredicate
*/
public static final FloatBinaryPredicate EQUAL_FLOAT
= new FloatBinaryPredicate() {
@Override
public boolean holds(float a, float b) {
return a == b;
}
};
/**
* A binary predicate representing the not equal relation (!=)
* between two floats.
* @see FloatBinaryPredicate
*/
public static final FloatBinaryPredicate NOT_EQUAL_FLOAT
= new FloatBinaryPredicate() {
@Override
public boolean holds(float a, float b) {
return a != b;
}
};
/**
* A binary predicate representing the less than relation (<)
* between two floats.
* @see FloatBinaryPredicate
*/
public static final FloatBinaryPredicate LESS_FLOAT
= new FloatBinaryPredicate() {
@Override
public boolean holds(float a, float b) {
return a < b;
}
};
/**
* A binary predicate representing the greater than relation (>)
* between two floats.
* @see FloatBinaryPredicate
*/
public static final FloatBinaryPredicate GREATER_FLOAT
= new FloatBinaryPredicate() {
@Override
public boolean holds(float a, float b) {
return a > b;
}
};
/**
* A binary predicate representing the less than or equal to relation (<=)
* between two floats.
* @see FloatBinaryPredicate
*/
public static final FloatBinaryPredicate LESS_OR_EQUAL_FLOAT
= new FloatBinaryPredicate() {
@Override
public boolean holds(float a, float b) {
return a <= b;
}
};
/**
* A binary predicate representing the greater or equal to relation (>=)
* between two floats.
* @see FloatBinaryPredicate
*/
public static final FloatBinaryPredicate GREATER_OR_EQUAL_FLOAT
= new FloatBinaryPredicate() {
@Override
public boolean holds(float a, float b) {
return a >= b;
}
};
/**
* Returns the negated predicate.
* @param binaryPredicate predicate which negation should be returned
* @return the negated predicate
*/
public static FloatBinaryPredicate not(
final FloatBinaryPredicate binaryPredicate) {
return new FloatBinaryPredicate() {
@Override
public boolean holds(float a, float b) {
return binaryPredicate.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff both specified predicate hold.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "and" operation
*/
public static FloatBinaryPredicate and(
final FloatBinaryPredicate binaryPredicate1,
final FloatBinaryPredicate binaryPredicate2) {
return new FloatBinaryPredicate() {
@Override
public boolean holds(float a, float b) {
return binaryPredicate1.holds(a, b)
&& binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff any of the specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "or" operation
*/
public static FloatBinaryPredicate or(
final FloatBinaryPredicate binaryPredicate1,
final FloatBinaryPredicate binaryPredicate2) {
return new FloatBinaryPredicate() {
@Override
public boolean holds(float a, float b) {
return binaryPredicate1.holds(a, b)
|| binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff exactly one specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "xor" operation
*/
public static FloatBinaryPredicate xor(
final FloatBinaryPredicate binaryPredicate1,
final FloatBinaryPredicate binaryPredicate2) {
return new FloatBinaryPredicate() {
@Override
public boolean holds(float a, float b) {
return binaryPredicate1.holds(a, b)
^ binaryPredicate2.holds(a, b);
}
};
}
}
public static final class DoubleBinaryPredicates {
// disable instantiation
public DoubleBinaryPredicates() { }
/**
* A binary predicate representing the equal relation (==)
* between two doubles.
* @see DoubleBinaryPredicate
*/
public static final DoubleBinaryPredicate EQUAL_DOUBLE
= new DoubleBinaryPredicate() {
@Override
public boolean holds(double a, double b) {
return a == b;
}
};
/**
* A binary predicate representing the not equal relation (!=)
* between two doubles.
* @see DoubleBinaryPredicate
*/
public static final DoubleBinaryPredicate NOT_EQUAL_DOUBLE
= new DoubleBinaryPredicate() {
@Override
public boolean holds(double a, double b) {
return a != b;
}
};
/**
* A binary predicate representing the less than relation (<)
* between two doubles.
* @see DoubleBinaryPredicate
*/
public static final DoubleBinaryPredicate LESS_DOUBLE
= new DoubleBinaryPredicate() {
@Override
public boolean holds(double a, double b) {
return a < b;
}
};
/**
* A binary predicate representing the greater than relation (>)
* between two doubles.
* @see DoubleBinaryPredicate
*/
public static final DoubleBinaryPredicate GREATER_DOUBLE
= new DoubleBinaryPredicate() {
@Override
public boolean holds(double a, double b) {
return a > b;
}
};
/**
* A binary predicate representing the less than or equal to relation (<=)
* between two doubles.
* @see DoubleBinaryPredicate
*/
public static final DoubleBinaryPredicate LESS_OR_EQUAL_DOUBLE
= new DoubleBinaryPredicate() {
@Override
public boolean holds(double a, double b) {
return a <= b;
}
};
/**
* A binary predicate representing the greater or equal to relation (>=)
* between two doubles.
* @see DoubleBinaryPredicate
*/
public static final DoubleBinaryPredicate GREATER_OR_EQUAL_DOUBLE
= new DoubleBinaryPredicate() {
@Override
public boolean holds(double a, double b) {
return a >= b;
}
};
/**
* Returns the negated predicate.
* @param binaryPredicate predicate which negation should be returned
* @return the negated predicate
*/
public static DoubleBinaryPredicate not(
final DoubleBinaryPredicate binaryPredicate) {
return new DoubleBinaryPredicate() {
@Override
public boolean holds(double a, double b) {
return binaryPredicate.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff both specified predicate hold.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "and" operation
*/
public static DoubleBinaryPredicate and(
final DoubleBinaryPredicate binaryPredicate1,
final DoubleBinaryPredicate binaryPredicate2) {
return new DoubleBinaryPredicate() {
@Override
public boolean holds(double a, double b) {
return binaryPredicate1.holds(a, b)
&& binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff any of the specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "or" operation
*/
public static DoubleBinaryPredicate or(
final DoubleBinaryPredicate binaryPredicate1,
final DoubleBinaryPredicate binaryPredicate2) {
return new DoubleBinaryPredicate() {
@Override
public boolean holds(double a, double b) {
return binaryPredicate1.holds(a, b)
|| binaryPredicate2.holds(a, b);
}
};
}
/**
* Returns the predicate which holds iff exactly one specified predicate holds.
* @param binaryPredicate predicate which negation should be returned
* @return the predicate obtained by applying the logical "xor" operation
*/
public static DoubleBinaryPredicate xor(
final DoubleBinaryPredicate binaryPredicate1,
final DoubleBinaryPredicate binaryPredicate2) {
return new DoubleBinaryPredicate() {
@Override
public boolean holds(double a, double b) {
return binaryPredicate1.holds(a, b)
^ binaryPredicate2.holds(a, b);
}
};
}
}
}