org.jmol.script
Class ScriptMathProcessor

java.lang.Object
  extended by org.jmol.script.ScriptMathProcessor

 class ScriptMathProcessor
extends Object


Field Summary
private  boolean asBitSet
           
private  boolean asVector
           
private  int braceCount
           
private  int equalCount
           
private  ScriptEvaluator eval
           
private  boolean haveSpaceBeforeSquare
           
private  int ifPt
           
private  char[] ifStack
           
private  int incrementX
           
private  boolean isArrayItem
           
private  boolean isSyntaxCheck
          Reverse Polish Notation Engine for IF, SET, and %{...} -- Bob Hanson 2/16/2007 Just a (not so simple?) RPN processor that can handle boolean, int, float, String, Point3f, and BitSet hansonr@stolaf.edu
private  boolean logMessages
           
private  int oPt
           
private  Token[] oStack
           
private  int parenCount
           
private  int ptid
           
private  int ptx
           
private  boolean skipping
           
private  int squareCount
           
private  Viewer viewer
           
private  boolean wasSyntaxCheck
           
private  boolean wasX
           
private  int xPt
           
private  ScriptVariable[] xStack
           
 
Constructor Summary
ScriptMathProcessor(ScriptEvaluator eval, boolean isArrayItem, boolean asVector, boolean asBitSet)
           
 
Method Summary
(package private)  boolean addOp(Token op)
          addOp The primary driver of the Reverse Polish Notation evaluation engine.
(package private)  boolean addOp(Token op, boolean allowMathFunc)
           
(package private)  boolean addX(BitSet bs)
           
private  boolean addX(boolean x)
           
private  boolean addX(float x)
           
private  boolean addX(int x)
           
(package private)  boolean addX(Object x)
           
(package private)  boolean addX(Point3f pt)
           
(package private)  boolean addX(ScriptVariable x)
           
(package private)  boolean addXNum(ScriptVariable x)
           
private  boolean doBitsetSelect()
           
(package private)  void dumpStacks(String message)
           
private  boolean evaluateArray(ScriptVariable[] args, boolean allowMatrix)
           
private  boolean evaluateBin(ScriptVariable[] args)
           
private  boolean evaluateColor(ScriptVariable[] args)
           
private  boolean evaluateCompare(ScriptVariable[] args)
           
private  boolean evaluateConnected(ScriptVariable[] args)
           
private  boolean evaluateCross(ScriptVariable[] args)
           
private  boolean evaluateData(ScriptVariable[] args)
           
private  boolean evaluateDot(ScriptVariable[] args, int tok)
           
private  boolean evaluateFind(ScriptVariable[] args)
           
private  boolean evaluateFunction(int tok)
           
private  boolean evaluateGetProperty(ScriptVariable[] args)
           
private  boolean evaluateHelix(ScriptVariable[] args)
           
private  boolean evaluateLabel(int intValue, ScriptVariable[] args)
           
private  boolean evaluateList(int tok, ScriptVariable[] args)
           
private  boolean evaluateLoad(ScriptVariable[] args, int tok)
           
private  boolean evaluateMath(ScriptVariable[] args, int tok)
           
private  boolean evaluateMeasure(ScriptVariable[] args, int tok)
           
private  boolean evaluatePlane(ScriptVariable[] args, int tok)
           
private  boolean evaluatePoint(ScriptVariable[] args)
           
private  boolean evaluatePrompt(ScriptVariable[] args)
           
private  boolean evaluateQuaternion(ScriptVariable[] args, int tok)
           
private  boolean evaluateRandom(ScriptVariable[] args)
           
private  boolean evaluateReplace(ScriptVariable[] args)
           
private  boolean evaluateRowCol(ScriptVariable[] args, int tok)
           
private  boolean evaluateScript(ScriptVariable[] args, int tok)
           
private  boolean evaluateSort(ScriptVariable[] args)
           
private  boolean evaluateString(int tok, ScriptVariable[] args)
           
private  boolean evaluateSubstructure(ScriptVariable[] args, int tok)
           
private  boolean evaluateSymop(ScriptVariable[] args, boolean haveBitSet)
           
private  boolean evaluateUserFunction(String name, ScriptVariable[] args, int tok, boolean isSelector)
           
private  boolean evaluateVolume(ScriptVariable[] args)
           
private  boolean evaluateWithin(ScriptVariable[] args)
           
private  boolean evaluateWrite(ScriptVariable[] args)
           
private  boolean getBoundBox(ScriptVariable x2)
           
(package private) static Matrix4f getMatrix4f(Matrix3f matRotate, Tuple3f vTranslate)
           
private static Object getMinMax(Object floatOrSVArray, int tok)
           
private static Object getMinMaxPoint(Object pointOrSVArray, int tok)
          calculates the statistical value for x, y, and z independently
private static Object getMinMaxQuaternion(Object quaternionOrSVData, int tok)
           
private  boolean getPointOrBitsetOperation(Token op, ScriptVariable x2)
           
protected static Quaternion[] getQuaternionArray(Object quaternionOrSVData)
           
(package private)  ScriptVariable getResult(boolean allowUnderflow)
           
private  ScriptVariable getX()
           
private static boolean isOpFunc(Token op)
           
private  boolean operate()
           
private  Point4f planeValue(Token x)
           
 Point3f ptValue(ScriptVariable x, boolean allowFloat)
           
private  void putIf(char c)
           
private  void putOp(Token op)
           
private  void putX(ScriptVariable x)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

isSyntaxCheck

private boolean isSyntaxCheck
Reverse Polish Notation Engine for IF, SET, and %{...} -- Bob Hanson 2/16/2007 Just a (not so simple?) RPN processor that can handle boolean, int, float, String, Point3f, and BitSet hansonr@stolaf.edu


wasSyntaxCheck

private boolean wasSyntaxCheck

logMessages

private boolean logMessages

eval

private ScriptEvaluator eval

viewer

private Viewer viewer

oStack

private Token[] oStack

xStack

private ScriptVariable[] xStack

ifStack

private char[] ifStack

ifPt

private int ifPt

oPt

private int oPt

xPt

private int xPt

parenCount

private int parenCount

squareCount

private int squareCount

braceCount

private int braceCount

wasX

private boolean wasX

incrementX

private int incrementX

isArrayItem

private boolean isArrayItem

asVector

private boolean asVector

asBitSet

private boolean asBitSet

ptid

private int ptid

ptx

private int ptx

skipping

private boolean skipping

haveSpaceBeforeSquare

private boolean haveSpaceBeforeSquare

equalCount

private int equalCount
Constructor Detail

ScriptMathProcessor

ScriptMathProcessor(ScriptEvaluator eval,
                    boolean isArrayItem,
                    boolean asVector,
                    boolean asBitSet)
Method Detail

getResult

ScriptVariable getResult(boolean allowUnderflow)
                   throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

putX

private void putX(ScriptVariable x)

putOp

private void putOp(Token op)

putIf

private void putIf(char c)

addX

boolean addX(ScriptVariable x)

addX

boolean addX(Object x)

addX

boolean addX(BitSet bs)

addX

boolean addX(Point3f pt)

addXNum

boolean addXNum(ScriptVariable x)
          throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

addX

private boolean addX(boolean x)

addX

private boolean addX(int x)

addX

private boolean addX(float x)

isOpFunc

private static boolean isOpFunc(Token op)

addOp

boolean addOp(Token op)
        throws ScriptEvaluator.ScriptException
addOp The primary driver of the Reverse Polish Notation evaluation engine. This method loads operators onto the oStack[] and processes them based on a precedence system. Operands are added by addX() onto the xStack[]. We check here for syntax issues that were not caught in the compiler. I suppose that should be done at compilation stage, but this is how it is for now. The processing of functional arguments and (___?___:___) constructs is carried out by pushing markers onto the stacks that later can be used to fill argument lists or turn "skipping" on or off. Note that in the case of skipped sections of ( ? : ) no attempt is made to do syntax checking. [That's not entirely true -- when syntaxChecking is true, that is, when the user is typing at the Jmol application console, then this code is being traversed with dummy variables. That could be improved, for sure. Actually, there's plenty of room for improvement here. I did this based on what I learned in High School in 1974 -- 35 years ago! -- when I managed to build a mini FORTRAN compiler from scratch in machine code. That was fun. (This was fun, too.) -- Bob Hanson, hansonr@stolaf.edu 6/9/2009

Parameters:
op -
Returns:
false if an error condition arises
Throws:
ScriptEvaluator.ScriptException

addOp

boolean addOp(Token op,
              boolean allowMathFunc)
        throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

doBitsetSelect

private boolean doBitsetSelect()

dumpStacks

void dumpStacks(String message)

getX

private ScriptVariable getX()
                     throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateFunction

private boolean evaluateFunction(int tok)
                          throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateCompare

private boolean evaluateCompare(ScriptVariable[] args)
                         throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateVolume

private boolean evaluateVolume(ScriptVariable[] args)
                        throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateSort

private boolean evaluateSort(ScriptVariable[] args)
                      throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateSymop

private boolean evaluateSymop(ScriptVariable[] args,
                              boolean haveBitSet)
                       throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateBin

private boolean evaluateBin(ScriptVariable[] args)
                     throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateHelix

private boolean evaluateHelix(ScriptVariable[] args)
                       throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateDot

private boolean evaluateDot(ScriptVariable[] args,
                            int tok)
                     throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

ptValue

public Point3f ptValue(ScriptVariable x,
                       boolean allowFloat)
                throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

planeValue

private Point4f planeValue(Token x)

evaluateMeasure

private boolean evaluateMeasure(ScriptVariable[] args,
                                int tok)
                         throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateUserFunction

private boolean evaluateUserFunction(String name,
                                     ScriptVariable[] args,
                                     int tok,
                                     boolean isSelector)
                              throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateFind

private boolean evaluateFind(ScriptVariable[] args)
                      throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateGetProperty

private boolean evaluateGetProperty(ScriptVariable[] args)

evaluatePlane

private boolean evaluatePlane(ScriptVariable[] args,
                              int tok)
                       throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluatePoint

private boolean evaluatePoint(ScriptVariable[] args)

evaluatePrompt

private boolean evaluatePrompt(ScriptVariable[] args)

evaluateReplace

private boolean evaluateReplace(ScriptVariable[] args)
                         throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateString

private boolean evaluateString(int tok,
                               ScriptVariable[] args)
                        throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateList

private boolean evaluateList(int tok,
                             ScriptVariable[] args)
                      throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateRowCol

private boolean evaluateRowCol(ScriptVariable[] args,
                               int tok)
                        throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateArray

private boolean evaluateArray(ScriptVariable[] args,
                              boolean allowMatrix)

evaluateMath

private boolean evaluateMath(ScriptVariable[] args,
                             int tok)

evaluateQuaternion

private boolean evaluateQuaternion(ScriptVariable[] args,
                                   int tok)
                            throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateRandom

private boolean evaluateRandom(ScriptVariable[] args)

evaluateCross

private boolean evaluateCross(ScriptVariable[] args)

evaluateLoad

private boolean evaluateLoad(ScriptVariable[] args,
                             int tok)

evaluateWrite

private boolean evaluateWrite(ScriptVariable[] args)
                       throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateScript

private boolean evaluateScript(ScriptVariable[] args,
                               int tok)
                        throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateData

private boolean evaluateData(ScriptVariable[] args)

evaluateLabel

private boolean evaluateLabel(int intValue,
                              ScriptVariable[] args)
                       throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateWithin

private boolean evaluateWithin(ScriptVariable[] args)
                        throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

evaluateColor

private boolean evaluateColor(ScriptVariable[] args)

evaluateConnected

private boolean evaluateConnected(ScriptVariable[] args)

evaluateSubstructure

private boolean evaluateSubstructure(ScriptVariable[] args,
                                     int tok)
                              throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

operate

private boolean operate()
                 throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

getMatrix4f

static Matrix4f getMatrix4f(Matrix3f matRotate,
                            Tuple3f vTranslate)

getBoundBox

private boolean getBoundBox(ScriptVariable x2)

getPointOrBitsetOperation

private boolean getPointOrBitsetOperation(Token op,
                                          ScriptVariable x2)
                                   throws ScriptEvaluator.ScriptException
Throws:
ScriptEvaluator.ScriptException

getMinMax

private static Object getMinMax(Object floatOrSVArray,
                                int tok)

getMinMaxPoint

private static Object getMinMaxPoint(Object pointOrSVArray,
                                     int tok)
calculates the statistical value for x, y, and z independently

Parameters:
pointOrSVArray -
tok -
Returns:
Point3f or "NaN"

getMinMaxQuaternion

private static Object getMinMaxQuaternion(Object quaternionOrSVData,
                                          int tok)

getQuaternionArray

protected static Quaternion[] getQuaternionArray(Object quaternionOrSVData)