## Package net.sf.saxon.sort

This package provides utility routines for sorting and grouping.

See:
Description

Interface Summary
AtomicComparer: Interface representing an object that can be used to compare two XPath atomic values for equality or for ordering.
CollationURIResolver: A CollationURIResolver accepts a collation name as input, and returns a collation (represented by a StringCollator) as output.
GroupIterator: A GroupIterator is an iterator that iterates over a sequence of groups.
IntIterator: An iterator over a sequence of unboxed int values
IntSet: A set of integers represented as int values
NodeOrderComparer: A Comparer used for comparing nodes in document order
Sortable: A Sortable is an object that can be sorted using the QuickSort method.
SortKeyEvaluator: Callback interface used to evaluate sort keys.
StringCollator: This interface represents a "collation" as defined in XPath, that is, a set of rules for comparing strings
SubstringMatcher: This interface is implemented by a collation that is capable of supporting the XPath functions that require matching of a substring: namely contains(), starts-with, ends-with, substring-before, and substring-after.

Class Summary
AlphanumericComparer: A Comparer that treats strings as an alternating sequence of alpha parts and numeric parts.
AtomicSortComparer: An AtomicComparer used for comparing atomic values of arbitrary item types.
CalendarValueComparer: A comparer specifically for comparing two date, time, or dateTime values
CodepointCollatingComparer: An AtomicComparer used for comparing strings, untypedAtomic values, and URIs using the Unicode codepoint collation.
CodepointCollator: A collating sequence that uses Unicode codepoint ordering
CollatingAtomicComparer: An AtomicComparer used for comparing strings, untypedAtomic values, and URIs using a collation.
ComparableAtomicValueComparer: A comparer for comparing two "ordinary" atomic values, where the values implement the Comparable interface and the equals() method with the appropriate XPath semantics.
ComparisonKey: An object used as a comparison key.
DecimalSortComparer: An AtomicComparer used for sorting values that are known to be instances of xs:decimal (including xs:integer), It also supports a separate method for getting a collation key to test equality of items
DescendingComparer: A Comparer used for comparing descending keys.
DocumentOrderIterator: DocumentOrderIterator takes as input an iteration of nodes in any order, and returns as output an iteration of the same nodes in document order, eliminating any duplicates.
DocumentSorter: A DocumentSorter is an expression that sorts a sequence of nodes into document order.
DoubleSortComparer: An AtomicComparer used for sorting values that are known to be numeric.
EmptyGreatestComparer: A Comparer that modifies a base comparer by sorting empty key values and NaN values last (greatest), as opposed to the default which sorts them first.
EqualityComparer: A comparer for comparing two atomic values where (a) equals is defined, and is implemented using the Java equals() method, and (b) ordering is not defined, and results in a dynamic error.
GenericAtomicComparer: An AtomicComparer used for comparing atomic values of arbitrary item types.
GenericSorter: Generically sorts arbitrary shaped data (for example multiple arrays, 1,2 or 3-d matrices, and so on) using a quicksort or mergesort.
GlobalOrderComparer: A Comparer used for comparing nodes in document order.
GroupAdjacentIterator: A GroupAdjacentIterator iterates over a sequence of groups defined by xsl:for-each-group group-adjacent="x".
GroupByIterator: A GroupByIterator iterates over a sequence of groups defined by xsl:for-each-group group-by="x".
GroupEndingIterator: A GroupEndingIterator iterates over a sequence of groups defined by xsl:for-each-group group-ending-with="x".
GroupStartingIterator: A GroupStartingIterator iterates over a sequence of groups defined by xsl:for-each-group group-starting-with="x".
IntArraySet: Set of int values.
IntHashMap: A hash table that maps int keys to Object values.
IntHashSet: Set of int values.
IntRangeSet: Set of int values.
IntToIntHashMap: A hash table that maps int keys to int values.
LocalOrderComparer: A Comparer used for comparing nodes in document order.
LowercaseFirstComparer: A Comparer used for comparing keys
NamedCollation: A StringCollator is used for comparing strings (Java String objects).
NumericComparer: A Comparer used for comparing sort keys when data-type="number".
QuickSort: This is a generic version of C.A.R Hoare's Quick Sort algorithm.
Reverser: A Reverser is an expression that reverses the order of a sequence of items.
RuleBasedSubstringMatcher: This class wraps a RuleBasedCollator to provide a SubstringMatcher.
SortedGroupIterator: A SortedGroupIterator is a modified SortedIterator.
SortedIterator: Class to do a sorted iteration
SortedTupleIterator: A SortedTupleIterator is a modified SortedIterator.
SortExpression: Expression equivalent to the imaginary syntax expr sortby (sort-key)+
SortKeyDefinition: A SortKeyDefinition defines one component of a sort key.
StandardCollationURIResolver: StandardCollationURIResolver allows a Collation to be created given a URI starting with "http://saxon.sf.net/collation" followed by a set of query parameters.
TextComparer: A Comparer used for comparing sort keys when data-type="text".
TupleExpression: A tuple expression is an expression that returns a tuple.
TupleSorter: A TupleSorter is an expression that sorts a stream of tuples.
TupleSorter.TupleUnwrapper: Mapping function to map the wrapped objects returned by the SortedTupleIterator into real items.
UppercaseFirstComparer: A Comparer used for comparing strings, with upper case collated before lower case if the strings are otherwise equal.

## Package net.sf.saxon.sort Description

This package provides utility routines for sorting and grouping. Specifically, it contains a QuickSort implementation, and some AtomicComparer objects that handle character and numeric comparisons, together with the important DocumentOrderIterator which iterates over a set of nodes in document order.

The package also contains the classes to support the implementation of the XSLT 2.0 instruction xsl:for-each-group, and some utilities for maintaining sets and maps whose keys are unboxed integer values.

Michael H. Kay
Saxonica Limited
22 September 2005

Copyright (C) Michael H. Kay. All rights reserved.