com.waveset.expression
Class ExFunction.f_substr

java.lang.Object
  extended bycom.waveset.expression.ExNode
      extended bycom.waveset.expression.ExFunction.f_substr
All Implemented Interfaces:
com.sun.idm.debugger.common.Locatable
Enclosing class:
ExFunction

public static class ExFunction.f_substr
extends ExNode

The function node for the <substr> expression.

The substr expression will extract a substring from the string value of a subexpression. There are two forms:

     <substr> value start length </substr>

     <substr s='start' l='length'> value <substr>
 
Using the form with the start & length specified as attributes is more concise and readable, the form with start and length as subexpressions allows these arguments to be computed.

The start index is 0 based.

If start is missing, the start index is assumed to be 0.

A start index less than 0 is normalized to 0.

A missing length or a length that is less than zero means to extract the rest of the string beginning at the start index. A length of zero will yield an empty string (but not null).


Field Summary
 
Fields inherited from class com.waveset.expression.ExNode
_bindingCount, _children, _decoration, _parent, code_id, trace
 
Constructor Summary
ExFunction.f_substr()
           
 
Method Summary
protected  ExValue evalInternal(ExState state)
          Take a substring.
 java.lang.String getFunctionName()
          Nodes representing functions must have a name.
 int getLength()
           
 int getStart()
           
 void parseXml(org.w3c.dom.Element e)
          Override the usual parseXml so we can recognize our extended attributes.
 void setLength(int i)
           
 void setStart(int i)
           
 void toXmlAttributes(java.lang.StringBuffer b)
          Add our optional attributes to the start tag of our XML serialization.
 
Methods inherited from class com.waveset.expression.ExNode
addChild, addChildren, addCommonAttributes, beginTrace, clearOwner, endTrace, eval, evalChild, evalChildToObject, evalChildToString, evalToBoolean, evalToInt, evalToObject, evalToString, getBindingCount, getChild, getChildren, getDecoration, getHiddenVariable, getLocation, getOwner, getParent, isLiteral, parseCommonAttributes, postProcess, removeChild, resolveFunction, resolveVariable, setBindingCount, setChildren, setDecoration, setEnvironment, setLocation, setOwner, setOwner, setParent, toXml, toXml, toXml, toXmlChildren
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExFunction.f_substr

public ExFunction.f_substr()
Method Detail

getFunctionName

public java.lang.String getFunctionName()
Description copied from class: ExNode
Nodes representing functions must have a name. This name is used in the formatting of default trace messages and the default XML rendering. If a node doesn't have a name for some reason, or needs more control over the trace messges and XML, they must overload beginTrace, endTrace, and toXml below.

Specified by:
getFunctionName in class ExNode

getStart

public int getStart()

setStart

public void setStart(int i)

getLength

public int getLength()

setLength

public void setLength(int i)

parseXml

public void parseXml(org.w3c.dom.Element e)
              throws WavesetException
Override the usual parseXml so we can recognize our extended attributes.

Overrides:
parseXml in class ExNode
Throws:
WavesetException

toXmlAttributes

public void toXmlAttributes(java.lang.StringBuffer b)
Add our optional attributes to the start tag of our XML serialization.

Overrides:
toXmlAttributes in class ExNode

evalInternal

protected ExValue evalInternal(ExState state)
                        throws WavesetException
Take a substring.

We're not being especially careful about allocation here. If we need to be, then ExValue will have to have its own char[] array we can directly modify.

Specified by:
evalInternal in class ExNode
Throws:
WavesetException