gnu.xquery.util
Class OrderedMap
java.lang.Object
gnu.mapping.Procedure
gnu.mapping.ProcedureN
gnu.mapping.MethodProc
gnu.xquery.util.OrderedMap
- All Implemented Interfaces:
- CanInline, Inlineable, Named
public class OrderedMap
- extends MethodProc
- implements CanInline, Inlineable
A procedure used to represent a FLWOR expression with
an order by
clause.
(ValuesMap
is used for FLWOR expression
that don't have an order by
clause.)
As returned by the parser:
for $x1 in exp1, $x2 in exp2 where cond order by comparator1 ... return body
is represented as
ordered-map(tuple-sequence, body-function,
comparator-function1, flags1, collation1, ...)
Here tuple-sequence is an expression that returns a sequence of tuples,
which are currently implemnted as Java Object[] arrays.
After inlining we get:
ordered-map(tuple-sequence.
OrderedTuples.make$V(body-function,
new Object[]{comparator-function1, flags1, collation1, ...}))
A future optimization would be to create an instance of a new sub-class
of OrderedTuples. Then the body-function and comparator-functions
could be compiled as methods to that class. That wins especially
if it saves us having to create extra frame classes.
Methods inherited from class gnu.mapping.Procedure |
apply, check0, check1, check2, check3, check4, checkArgCount, checkN, getName, getProperty, getSetter, getSymbol, match0, match1, match2, match3, match4, matchN, maxArgs, minArgs, name, numArgs, removeProperty, set0, set1, setN, setName, setProperty, setProperty, setSetter, setSymbol, toString |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
orderedMap
public static final OrderedMap orderedMap
OrderedMap
public OrderedMap()
makeTuple$V
public static java.lang.Object[] makeTuple$V(java.lang.Object[] values)
inline
public Expression inline(ApplyExp exp,
ExpWalker walker)
- Description copied from interface:
CanInline
- Inline an application of this Procedure and return result.
Can return original expression.
- Specified by:
inline
in interface CanInline
apply
public void apply(CallContext ctx)
throws java.lang.Throwable
- Description copied from class:
Procedure
- Call this Procedure using the explicit-CallContext-convention.
The input arguments are (by default) in stack.args;
the result is written to ctx.consumer.
- Overrides:
apply
in class Procedure
- Throws:
java.lang.Throwable
compile
public void compile(ApplyExp exp,
Compilation comp,
Target target)
- Specified by:
compile
in interface Inlineable
getReturnType
public Type getReturnType(Expression[] args)
- Specified by:
getReturnType
in interface Inlineable