Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## com.sun.msv.grammar
Class ExpressionPool

    java.lang.Object
      com.sun.msv.grammar.ExpressionPool

All Implemented Interfaces:
  java.io.Serializable

public class ExpressionPool
extends java.lang.Object
implements java.io.Serializable

Creates a new Expression by combining existing expressions. all expressions are memorized and unified so that every subexpression will be shared and reused. Optimization will be also done transparently. For example, createChoice(P,P) will result in P. createSequence(P,nullSet) will result in nullSet. Furthermore, associative operators are grouped to the left. createChoice( (P|Q), (R|S) ) will be ((P|Q)|R)|S.

Although this unification is essential, this is also the performance bottle neck. In particular, createChoice and createSequence are two most commonly called methods.

For example, when validating a DocBook XML (150KB) twice against DocBook.trex(237KB), createChoice is called 63000 times and createSequence called 23000 times. (the third is the createOptional method and only 1560 times.) And they took more than 10% of validation time, which is the worst time-consuming method.

Therefore, please beware that this class includes several ugly code optimization.

Author:
  Kohsuke KAWAGUCHI
See Also:
  Serialized Form

Nested Class Summary
`static class` | `ExpressionPool.ClosedHash` expression cache by closed hash.

Constructor Summary
`ExpressionPool()`
`ExpressionPool(ExpressionPool parent)` creates new expression pool as a child pool of the given parent pool.

Method Summary
`Expression` | `createAnyString()`
`Expression` | `createAttribute(NameClass nameClass)`
`Expression` | `createAttribute(NameClass nameClass, Expression content)`
`Expression` | `createChoice(Expression left, Expression right)`
`Expression` | `createConcur(Expression left, Expression right)`
`Expression` | `createData(Datatype dt, StringPair typeName)`
`Expression` | `createData(Datatype dt, StringPair typeName, Expression except)`
`Expression` | `createData(XSDatatype dt)`
`Expression` | `createEpsilon()`
`Expression` | `createInterleave(Expression left, Expression right)`
`Expression` | `createList(Expression exp)`
`Expression` | `createMixed(Expression body)`
`Expression` | `createNullSet()`
`Expression` | `createOneOrMore(Expression child)`
`Expression` | `createOptional(Expression child)`
`Expression` | `createSequence(Expression left, Expression right)`
`Expression` | `createValue(Datatype dt, StringPair typeName, java.lang.Object value)`
`Expression` | `createValue(XSDatatype dt, java.lang.Object value)`
`Expression` | `createZeroOrMore(Expression child)`

Methods inherited from class java.lang.Object
`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### ExpressionPool

    public ExpressionPool(ExpressionPool parent)

  creates new expression pool as a child pool of the given parent pool.

  Every expression memorized in the parent pool can be retrieved, but update operations are only performed upon the child pool. In this way, the parent pool can be shared among the multiple threads without interfering performance.

  Furthermore, you can throw away a child pool after a certain time period to prevent it from eating up memory.

### ExpressionPool

    public ExpressionPool()

Method Detail

### createAttribute

    public final Expression createAttribute(NameClass nameClass)

### createAttribute

    public final Expression createAttribute(NameClass nameClass,
                                            Expression content)

### createEpsilon

    public final Expression createEpsilon()

### createNullSet

    public final Expression createNullSet()

### createAnyString

    public final Expression createAnyString()

### createChoice

    public final Expression createChoice(Expression left,
                                         Expression right)

### createOneOrMore

    public final Expression createOneOrMore(Expression child)

### createZeroOrMore

    public final Expression createZeroOrMore(Expression child)

### createOptional

    public final Expression createOptional(Expression child)

### createData

    public final Expression createData(XSDatatype dt)

### createData

    public final Expression createData(Datatype dt,
                                       StringPair typeName)

### createData

    public final Expression createData(Datatype dt,
                                       StringPair typeName,
                                       Expression except)

### createValue

    public final Expression createValue(XSDatatype dt,
                                        java.lang.Object value)

### createValue

    public final Expression createValue(Datatype dt,
                                        StringPair typeName,
                                        java.lang.Object value)

### createList

    public final Expression createList(Expression exp)

### createMixed

    public final Expression createMixed(Expression body)

### createSequence

    public final Expression createSequence(Expression left,
                                           Expression right)

### createConcur

    public final Expression createConcur(Expression left,
                                         Expression right)

### createInterleave

    public final Expression createInterleave(Expression left,
                                             Expression right)

Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD