1 21 package com.presumo.jms.selector; 22 23 import java.util.Hashtable ; 24 25 31 final class JmsIntegerLiteral extends JmsNumericLiteral 32 { 33 private Long data; 35 36 private static Hashtable instances = null; 39 40 41 45 49 static JmsIntegerLiteral getInstance(long newValue) 50 { 51 JmsIntegerLiteral retval; 52 53 Long search = new Long (newValue); 54 55 if (instances == null) 56 instances = new Hashtable (); 57 58 retval = (JmsIntegerLiteral) instances.get(search); 59 if (retval == null) { 60 retval = new JmsIntegerLiteral(newValue); 61 instances.put(search, retval); 62 } 63 else { 64 retval.incrementRefCount(); 65 } 66 67 return retval; 68 } 69 70 75 static JmsIntegerLiteral getUniqueInstance(long newValue) 76 { 77 return new JmsIntegerLiteral(newValue); 78 } 79 80 81 85 88 protected JmsIntegerLiteral(long newValue) 89 { 90 super(false); this.data = new Long (newValue); 92 this.stringRepresentation = data.toString(); 93 } 94 95 96 Number getNumber() { return data; } 100 101 106 JmsBooleanLiteral eq(JmsDataType value) throws SelectorFalseException { 107 if (! (value instanceof JmsNumericLiteral)) 108 throw SelectorFalseException.getInstance(); 109 110 if (value instanceof JmsFloatLiteral) { 111 if (data.doubleValue() == ( (JmsNumericLiteral)value ).getNumber().doubleValue() ) 112 return JmsBooleanLiteral.TRUE; 113 else 114 return JmsBooleanLiteral.FALSE; 115 } 116 else { 117 if (data.longValue() == ( (JmsNumericLiteral)value ).getNumber().longValue() ) 118 return JmsBooleanLiteral.TRUE; 119 else 120 return JmsBooleanLiteral.FALSE; 121 } 122 } 123 124 JmsBooleanLiteral lt(JmsNumericLiteral value) { 125 if (value instanceof JmsFloatLiteral) { 126 if (data.doubleValue() < value.getNumber().doubleValue()) 127 return JmsBooleanLiteral.TRUE; 128 else 129 return JmsBooleanLiteral.FALSE; 130 } 131 else { 132 if (data.longValue() < value.getNumber().longValue()) 133 return JmsBooleanLiteral.TRUE; 134 else 135 return JmsBooleanLiteral.FALSE; 136 } 137 } 138 139 JmsBooleanLiteral gt(JmsNumericLiteral value) { 140 if (value instanceof JmsFloatLiteral) { 141 if (data.doubleValue() > value.getNumber().doubleValue()) 142 return JmsBooleanLiteral.TRUE; 143 else 144 return JmsBooleanLiteral.FALSE; 145 } 146 else { 147 if (data.longValue() > value.getNumber().longValue()) 148 return JmsBooleanLiteral.TRUE; 149 else 150 return JmsBooleanLiteral.FALSE; 151 } 152 } 153 154 JmsNumericLiteral mult(JmsNumericLiteral value) { 155 if (value instanceof JmsFloatLiteral) { 156 double result = data.doubleValue() * value.getNumber().doubleValue(); 157 return JmsFloatLiteral.getUniqueInstance(result); 158 } 159 else { 160 long result = data.longValue() * value.getNumber().longValue(); 161 return JmsIntegerLiteral.getUniqueInstance(result); 162 } 163 } 164 165 JmsNumericLiteral div(JmsNumericLiteral value) { 166 if (value instanceof JmsFloatLiteral) { 167 double result = data.doubleValue() / value.getNumber().doubleValue(); 168 return JmsFloatLiteral.getUniqueInstance(result); 169 } 170 else { 171 long result = data.longValue() / value.getNumber().longValue(); 172 return JmsIntegerLiteral.getUniqueInstance(result); 173 } 174 } 175 176 JmsNumericLiteral add(JmsNumericLiteral value) { 177 if (value instanceof JmsFloatLiteral) { 178 double result = data.doubleValue() + value.getNumber().doubleValue(); 179 return JmsFloatLiteral.getUniqueInstance(result); 180 } 181 else { 182 long result = data.longValue() + value.getNumber().longValue(); 183 return JmsIntegerLiteral.getUniqueInstance(result); 184 } 185 } 186 187 JmsNumericLiteral sub(JmsNumericLiteral value) { 188 if (value instanceof JmsFloatLiteral) { 189 double result = data.doubleValue() - value.getNumber().doubleValue(); 190 return JmsFloatLiteral.getUniqueInstance(result); 191 } 192 else { 193 long result = data.longValue() - value.getNumber().longValue(); 194 return JmsIntegerLiteral.getUniqueInstance(result); 195 } 196 } 197 198 199 203 short getType() { return JmsOperand.JMS_INTEGER_LITERAL; } 204 205 206 210 protected void delete(JmsOperand parent) { 211 super.delete(parent); 212 if (refcount == 0) { 213 instances.remove(data); 214 if (instances.size() == 0) { 215 instances = null; 216 } 217 } 218 } 219 220 } 221 222 223 | Popular Tags |