gnu.xquery.util
Class OrderedMap

java.lang.Object
  extended by gnu.mapping.Procedure
      extended by gnu.mapping.ProcedureN
          extended by gnu.mapping.MethodProc
              extended by 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.


Field Summary
static OrderedMap orderedMap
           
 
Fields inherited from class gnu.mapping.MethodProc
argTypes, NO_MATCH, NO_MATCH_AMBIGUOUS, NO_MATCH_BAD_TYPE, NO_MATCH_TOO_FEW_ARGS, NO_MATCH_TOO_MANY_ARGS
 
Fields inherited from class gnu.mapping.ProcedureN
noArgs
 
Constructor Summary
OrderedMap()
           
 
Method Summary
 void apply(CallContext ctx)
          Call this Procedure using the explicit-CallContext-convention.
 void compile(ApplyExp exp, Compilation comp, Target target)
           
 Type getReturnType(Expression[] args)
           
 Expression inline(ApplyExp exp, ExpWalker walker)
          Inline an application of this Procedure and return result.
static java.lang.Object[] makeTuple$V(java.lang.Object[] values)
           
 
Methods inherited from class gnu.mapping.MethodProc
applyN, getParameterType, isApplicable, matchFailAsException, mostSpecific, mostSpecific, numParameters, resolveParameterTypes
 
Methods inherited from class gnu.mapping.ProcedureN
apply0, apply1, apply2, apply3, apply4
 
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
 

Field Detail

orderedMap

public static final OrderedMap orderedMap
Constructor Detail

OrderedMap

public OrderedMap()
Method Detail

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