1 28 29 package com.caucho.jms.selector; 30 31 import com.caucho.util.L10N; 32 33 import javax.jms.JMSException ; 34 import javax.jms.Message ; 35 36 39 public class NumericBinarySelector extends Selector { 40 static L10N L = new L10N(Selector.class); 41 42 private int _token; 43 private Selector _left; 44 private Selector _right; 45 46 NumericBinarySelector(int token, Selector left, Selector right) 47 { 48 _token = token; 49 _left = left; 50 _right = right; 51 } 52 53 57 Object evaluate(Message message) 58 throws JMSException 59 { 60 Object lobj = _left.evaluate(message); 61 Object robj = _right.evaluate(message); 62 63 if (! (lobj instanceof Number ) || ! (robj instanceof Number )) 64 return NULL; 65 66 if (isInteger(lobj) && isInteger(robj)) { 67 long lvalue = toLong(lobj); 68 long rvalue = toLong(robj); 69 70 switch (_token) { 71 case '+': 72 return new Long (lvalue + rvalue); 73 74 case '-': 75 return new Long (lvalue - rvalue); 76 77 case '*': 78 return new Long (lvalue * rvalue); 79 80 case '/': 81 return new Long (lvalue / rvalue); 82 83 default: 84 throw new RuntimeException ("Unknown expression"); 85 } 86 } 87 else { 88 double lvalue = ((Number ) lobj).doubleValue(); 89 double rvalue = ((Number ) robj).doubleValue(); 90 91 switch (_token) { 92 case '+': 93 return new Double (lvalue + rvalue); 94 95 case '-': 96 return new Double (lvalue - rvalue); 97 98 case '*': 99 return new Double (lvalue * rvalue); 100 101 case '/': 102 return new Double (lvalue / rvalue); 103 104 default: 105 throw new RuntimeException ("Unknown expression"); 106 } 107 } 108 } 109 } 110 | Popular Tags |