package javolution.util.function;
import javolution.lang.Parallelizable;
import javolution.lang.Realtime;
import javolution.util.internal.comparator.ArrayComparatorImpl;
import javolution.util.internal.comparator.IdentityComparatorImpl;
import javolution.util.internal.comparator.LexicalCaseInsensitiveComparatorImpl;
import javolution.util.internal.comparator.LexicalComparatorImpl;
import javolution.util.internal.comparator.LexicalFastComparatorImpl;
import javolution.util.internal.comparator.StandardComparatorImpl;
import static javolution.lang.Realtime.Limit.*;
/**
* <p> A set of useful equalities comparators.</p>
*
* @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
* @version 6.0, July 21, 2013
*/
public class Equalities {
/**
* A standard object comparator (based on the object hashCode and equals
* methods). Comparisons either use the object natural order (which
* should be consistent with equals) or an empirical method
* (if the object does not implement {@link Comparable}).
*
*/
@Parallelizable
@Realtime(limit = UNKNOWN)
public static final Equality<Object> STANDARD = new StandardComparatorImpl<Object>();
/**
* A comparator for which instances are only equals to themselves.
* For comparisons an empirical method consistent with equals ({@code == })
* is used.
*/
@Parallelizable
@Realtime(limit = CONSTANT)
public static final Equality<Object> IDENTITY = new IdentityComparatorImpl<Object>();
/**
* A content array comparator. If the content of an array is also
* an array (multi-dimensional arrays), that same comparator is used
* for equality and comparison (recursive). The {@link #STANDARD standard}
* comparator is used for non-array elements.
*/
@Parallelizable
@Realtime(limit = LINEAR)
public static final Equality<Object> ARRAY = new ArrayComparatorImpl();
/**
* A lexicographic comparator for any {@link CharSequence}.
*/
@Parallelizable
@Realtime(limit = LINEAR)
public static final Equality<CharSequence> LEXICAL = new LexicalComparatorImpl();
/**
* A case insensitive lexicographic comparator for any {@link CharSequence}.
*/
@Parallelizable
@Realtime(limit = LINEAR)
public static final Equality<CharSequence> LEXICAL_CASE_INSENSITIVE = new LexicalCaseInsensitiveComparatorImpl();
/**
* An optimized lexical comparator for any {@link CharSequence} taking
* a sample of few characters instead of the whole character sequence to
* calculate the hash code (still equality comparison checks all characters).
*/
@Parallelizable
@Realtime(limit = LINEAR)
public static final Equality<CharSequence> LEXICAL_FAST = new LexicalFastComparatorImpl();
/**
* Utility class (private constructor).
*/
private Equalities() {}
}