1 21 package com.presumo.jms.selector; 22 23 import java.util.Hashtable ; 24 25 30 final class JmsFloatLiteral extends JmsNumericLiteral 31 { 32 private Double data; 34 35 private static Hashtable instances = null; 38 39 43 47 static JmsFloatLiteral getInstance(double newValue) { 48 JmsFloatLiteral retval; 49 50 Double search = new Double (newValue); 51 52 if (instances == null) 53 instances = new Hashtable (); 54 55 retval = (JmsFloatLiteral) instances.get(search); 56 if (retval == null) { 57 retval = new JmsFloatLiteral(newValue); 58 instances.put(search, retval); 59 } 60 else { 61 retval.incrementRefCount(); 62 } 63 64 return retval; 65 } 66 67 72 static JmsFloatLiteral getUniqueInstance(double newValue) { 73 return new JmsFloatLiteral(newValue); 74 } 75 76 80 83 protected JmsFloatLiteral(double newValue) 84 { 85 super(false); this.data = new Double (newValue); 87 this.stringRepresentation = data.toString(); 88 } 89 90 94 Number getNumber() { return data; } 95 96 JmsBooleanLiteral eq(JmsDataType value) throws SelectorFalseException { 97 if (! (value instanceof JmsNumericLiteral)) 98 throw SelectorFalseException.getInstance(); 99 100 if (data.doubleValue() == ( (JmsNumericLiteral)value ).getNumber().doubleValue() ) 101 return JmsBooleanLiteral.TRUE; 102 else 103 return JmsBooleanLiteral.FALSE; 104 } 105 106 JmsBooleanLiteral lt(JmsNumericLiteral value) { 107 if (data.doubleValue() < value.getNumber().doubleValue()) 108 return JmsBooleanLiteral.TRUE; 109 else 110 return JmsBooleanLiteral.FALSE; 111 } 112 113 JmsBooleanLiteral gt(JmsNumericLiteral value) { 114 if (data.doubleValue() > value.getNumber().doubleValue()) 115 return JmsBooleanLiteral.TRUE; 116 else 117 return JmsBooleanLiteral.FALSE; 118 } 119 120 JmsNumericLiteral mult(JmsNumericLiteral value) { 121 double result = data.doubleValue() * value.getNumber().doubleValue(); 122 return JmsFloatLiteral.getUniqueInstance(result); 123 } 124 125 JmsNumericLiteral div(JmsNumericLiteral value) { 126 double result = data.doubleValue() / value.getNumber().doubleValue(); 127 return JmsFloatLiteral.getUniqueInstance(result); 128 } 129 130 JmsNumericLiteral add(JmsNumericLiteral value) { 131 double result = data.doubleValue() - value.getNumber().doubleValue(); 132 return JmsFloatLiteral.getUniqueInstance(result); 133 } 134 135 JmsNumericLiteral sub(JmsNumericLiteral value) { 136 double result = data.doubleValue() - value.getNumber().doubleValue(); 137 return JmsFloatLiteral.getUniqueInstance(result); 138 } 139 140 141 145 short getType() { return JmsOperand.JMS_FLOAT_LITERAL; } 146 147 148 152 protected void delete(JmsOperand parent) { 153 super.delete(parent); 154 if (refcount == 0) { 155 instances.remove(data); 156 if (instances.size() == 0) { 157 instances = null; 158 } 159 } 160 } 161 162 } 163 164 165 | Popular Tags |