/*
* @(#)$Id: OptimizationTag.java,v 1.7 2001/10/09 00:05:13 Bear Exp $
*
* Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the proprietary information of Sun Microsystems, Inc.
* Use is subject to license terms.
*
*/
package com.sun.msv.verifier.regexp;
import com.sun.msv.grammar.Expression;
import com.sun.msv.grammar.ElementExp;
import java.util.Map;
/**
* this object will be added to Expression.verifierTag
* to speed up typical validation.
*
* @author <a href="mailto:kohsuke.kawaguchi@eng.sun.com">Kohsuke KAWAGUCHI</a>
*/
final class OptimizationTag
{
/** cached value of string care level.
* See Acceptor.getStringCareLevel for meanings of value.
*/
int stringCareLevel = STRING_NOTCOMPUTED;
/** a value indicates that stringCareLevel has not computed yet. */
public static final int STRING_NOTCOMPUTED = -1;
/**
* map from element to residual(exp,ElementToken(element))
*
* this map is not applicable when the ElementToken represents
* more than one element. Because of 'concur' operator.
*
* In RELAX,
* residual(exp,elem1|elem2) = residual(exp,elem1) | residual(exp,elem2)
*
* Since it is possible for multiple threads to access the same OptimizationTag
* concurrently, it has to be serialized.
*/
final Map simpleElementTokenResidual = new java.util.Hashtable();
protected static final class OwnerAndCont
{
final ElementExp owner;
final Expression continuation;
public OwnerAndCont( ElementExp owner, Expression cont )
{ this.owner=owner; this.continuation=cont; }
};
/** map from (namespaceURI,tagName) pair to OwnerAndContinuation. */
final Map transitions = new java.util.Hashtable();
/** AttributePruner.prune(exp) */
Expression attributePrunedExpression;
// /** a flag that indicates this expression doesn't have any attribute node.
// *
// * null means unknown.
// */
// Boolean isAttributeFree;
}