@Internal public abstract class BasicTypeComparator<T extends Comparable<T>> extends TypeComparator<T> implements Serializable
Modifier and Type | Field and Description |
---|---|
protected boolean |
ascendingComparison |
Modifier | Constructor and Description |
---|---|
protected |
BasicTypeComparator(boolean ascending) |
Modifier and Type | Method and Description |
---|---|
int |
compare(T first,
T second)
Compares two records in object form.
|
int |
compareToReference(TypeComparator<T> referencedComparator)
This method compares the element that has been set as reference in this type accessor, to the
element set as reference in the given type accessor.
|
boolean |
equalToReference(T candidate)
Checks, whether the given element is equal to the element that has been set as the comparison
reference in this comparator instance.
|
int |
extractKeys(Object record,
Object[] target,
int index)
Extracts the key fields from a record.
|
TypeComparator[] |
getFlatComparators()
Get the field comparators.
|
int |
hash(T value)
Computes a hash value for the given record.
|
boolean |
invertNormalizedKey()
Flag whether normalized key comparisons should be inverted key should be interpreted
inverted, i.e.
|
T |
readWithKeyDenormalization(T reuse,
DataInputView source)
Reads the record back while de-normalizing the key fields.
|
void |
setReference(T toCompare)
Sets the given element as the comparison reference for future calls to
TypeComparator.equalToReference(Object) and TypeComparator.compareToReference(TypeComparator) . |
boolean |
supportsSerializationWithKeyNormalization()
Check whether this comparator supports to serialize the record in a format that replaces its
keys by a normalized key.
|
void |
writeWithKeyNormalization(T record,
DataOutputView target)
Writes the record in such a fashion that all keys are normalizing and at the beginning of the
serialized data.
|
compareAgainstReference, compareSerialized, duplicate, getNormalizeKeyLen, isNormalizedKeyPrefixOnly, putNormalizedKey, supportsCompareAgainstReference, supportsNormalizedKey
public int hash(T value)
TypeComparator
The hash code is typically not used as it is in hash tables and for partitioning, but it is further scrambled to make sure that a projection of the hash values to a lower cardinality space is as results in a rather uniform value distribution. However, any collisions produced by this method cannot be undone. While it is NOT important to create hash codes that cover the full spectrum of bits in the integer, it IS important to avoid collisions when combining two value as much as possible.
hash
in class TypeComparator<T extends Comparable<T>>
value
- The record to be hashed.Object.hashCode()
public void setReference(T toCompare)
TypeComparator
TypeComparator.equalToReference(Object)
and TypeComparator.compareToReference(TypeComparator)
. This method must
set the given element into this comparator instance's state. If the comparison happens on a
subset of the fields from the record, this method may extract those fields.
A typical example for checking the equality of two elements is the following:
E e1 = ...;
E e2 = ...;
TypeComparator<E> acc = ...;
acc.setReference(e1);
boolean equal = acc.equalToReference(e2);
The rational behind this method is that elements are typically compared using certain
features that are extracted from them, (such de-serializing as a subset of fields). When
setting the reference, this extraction happens. The extraction needs happen only once per
element, even though an element is often compared to multiple other elements, such as when
finding equal elements in the process of grouping the elements.setReference
in class TypeComparator<T extends Comparable<T>>
toCompare
- The element to set as the comparison reference.public boolean equalToReference(T candidate)
TypeComparator
equalToReference
in class TypeComparator<T extends Comparable<T>>
candidate
- The candidate to check.TypeComparator.setReference(Object)
public int compareToReference(TypeComparator<T> referencedComparator)
TypeComparator
e1
and e2
via a comparator, this method can be used the following way.
E e1 = ...;
E e2 = ...;
TypeComparator<E> acc1 = ...;
TypeComparator<E> acc2 = ...;
acc1.setReference(e1);
acc2.setReference(e2);
int comp = acc1.compareToReference(acc2);
The rational behind this method is that elements are typically compared using certain
features that are extracted from them, (such de-serializing as a subset of fields). When
setting the reference, this extraction happens. The extraction needs happen only once per
element, even though an element is typically compared to many other elements when
establishing a sorted order. The actual comparison performed by this method may be very
cheap, as it happens on the extracted features.compareToReference
in class TypeComparator<T extends Comparable<T>>
referencedComparator
- The type accessors where the element for comparison has been set
as reference.referencedAccessors
is
smaller than the reference value of this type accessor; a value greater than zero, if it
is larger; zero, if both are equal.TypeComparator.setReference(Object)
public int compare(T first, T second)
TypeComparator
Comparator.compare(Object, Object)
.compare
in class TypeComparator<T extends Comparable<T>>
first
- The first record.second
- The second record.Comparator.compare(Object, Object)
.Comparator.compare(Object, Object)
public boolean invertNormalizedKey()
TypeComparator
invertNormalizedKey
in class TypeComparator<T extends Comparable<T>>
public boolean supportsSerializationWithKeyNormalization()
TypeComparator
supportsSerializationWithKeyNormalization
in class TypeComparator<T extends Comparable<T>>
public void writeWithKeyNormalization(T record, DataOutputView target) throws IOException
TypeComparator
#supportsSerializationWithKeyNormalization()
allows to check
that.writeWithKeyNormalization
in class TypeComparator<T extends Comparable<T>>
record
- The record object into which to read the record data.target
- The stream to which to write the data,IOException
TypeComparator.supportsSerializationWithKeyNormalization()
,
TypeComparator.readWithKeyDenormalization(Object, DataInputView)
,
NormalizableKey.copyNormalizedKey(MemorySegment, int, int)
public int extractKeys(Object record, Object[] target, int index)
TypeComparator
extractKeys
in class TypeComparator<T extends Comparable<T>>
record
- The record that contains the key(s)target
- The array to write the key(s) into.index
- The offset of the target array to start writing into.public TypeComparator[] getFlatComparators()
TypeComparator
TypeComparator.extractKeys(Object, Object[],
int)
to provide interoperability between different record types. Note, that this should
return at least one Comparator and that the number of Comparators must match the number of
extracted keys.getFlatComparators
in class TypeComparator<T extends Comparable<T>>
public T readWithKeyDenormalization(T reuse, DataInputView source) throws IOException
TypeComparator
#supportsSerializationWithKeyNormalization()
method.readWithKeyDenormalization
in class TypeComparator<T extends Comparable<T>>
reuse
- The reuse object into which to read the record data.source
- The stream from which to read the data,IOException
TypeComparator.supportsSerializationWithKeyNormalization()
,
TypeComparator.writeWithKeyNormalization(Object, DataOutputView)
,
NormalizableKey.copyNormalizedKey(MemorySegment, int, int)
Copyright © 2014–2024 The Apache Software Foundation. All rights reserved.