freemarker.core
Class ArithmeticEngine

java.lang.Object
  extended by freemarker.core.ArithmeticEngine
Direct Known Subclasses:
ArithmeticEngine.BigDecimalEngine, ArithmeticEngine.ConservativeEngine

public abstract class ArithmeticEngine
extends Object

Class to perform arithmetic operations.

Author:
Jonathan Revusky, Attila Szegedi

Nested Class Summary
static class ArithmeticEngine.BigDecimalEngine
          This is the default arithmetic engine in FreeMarker.
static class ArithmeticEngine.ConservativeEngine
          An arithmetic engine that conservatively widens the operation arguments to extent that they can hold the result of the operation.
 
Field Summary
static ArithmeticEngine.BigDecimalEngine BIGDECIMAL_ENGINE
          Arithmetic engine that converts all numbers to BigDecimal and then operates on them.
static ArithmeticEngine.ConservativeEngine CONSERVATIVE_ENGINE
          Arithmetic engine that uses (more-or-less) the widening conversions of Java language to determine the type of result of operation, instead of converting everything to BigDecimal up front.
protected  int maxScale
           
protected  int minScale
           
protected  int roundingPolicy
           
 
Constructor Summary
ArithmeticEngine()
           
 
Method Summary
abstract  Number add(Number first, Number second)
           
abstract  int compareNumbers(Number first, Number second)
           
abstract  Number divide(Number first, Number second)
           
abstract  Number modulus(Number first, Number second)
           
abstract  Number multiply(Number first, Number second)
           
 void setMaxScale(int maxScale)
          Sets the maximal scale to use when multiplying BigDecimal numbers.
 void setMinScale(int minScale)
          Sets the minimal scale to use when dividing BigDecimal numbers.
 void setRoundingPolicy(int roundingPolicy)
           
abstract  Number subtract(Number first, Number second)
           
abstract  Number toNumber(String s)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

BIGDECIMAL_ENGINE

public static final ArithmeticEngine.BigDecimalEngine BIGDECIMAL_ENGINE
Arithmetic engine that converts all numbers to BigDecimal and then operates on them. This is FreeMarker's default arithmetic engine.


CONSERVATIVE_ENGINE

public static final ArithmeticEngine.ConservativeEngine CONSERVATIVE_ENGINE
Arithmetic engine that uses (more-or-less) the widening conversions of Java language to determine the type of result of operation, instead of converting everything to BigDecimal up front.


minScale

protected int minScale

maxScale

protected int maxScale

roundingPolicy

protected int roundingPolicy
Constructor Detail

ArithmeticEngine

public ArithmeticEngine()
Method Detail

compareNumbers

public abstract int compareNumbers(Number first,
                                   Number second)
                            throws TemplateException
Throws:
TemplateException

add

public abstract Number add(Number first,
                           Number second)
                    throws TemplateException
Throws:
TemplateException

subtract

public abstract Number subtract(Number first,
                                Number second)
                         throws TemplateException
Throws:
TemplateException

multiply

public abstract Number multiply(Number first,
                                Number second)
                         throws TemplateException
Throws:
TemplateException

divide

public abstract Number divide(Number first,
                              Number second)
                       throws TemplateException
Throws:
TemplateException

modulus

public abstract Number modulus(Number first,
                               Number second)
                        throws TemplateException
Throws:
TemplateException

toNumber

public abstract Number toNumber(String s)

setMinScale

public void setMinScale(int minScale)
Sets the minimal scale to use when dividing BigDecimal numbers. Default value is 12.


setMaxScale

public void setMaxScale(int maxScale)
Sets the maximal scale to use when multiplying BigDecimal numbers. Default value is 100.


setRoundingPolicy

public void setRoundingPolicy(int roundingPolicy)