01: package com.teamkonzept.lib.math;
02:
03: public class CompareOperator extends BinaryOperator {
04:
05: final static int EQUAL = 0;
06: final static int NOT_EQUAL = 1;
07: final static int LESS = 2;
08: final static int LESS_OR_EQUAL = 3;
09: final static int GREATER = 4;
10: final static int GREATER_OR_EQUAL = 5;
11:
12: int type;
13:
14: public CompareOperator(int type, int parenlevel, int position)
15: throws UnsupportedOperatorException {
16: super (parenlevel, getPriority(type, position), position);
17: this .type = type;
18: }
19:
20: /**
21: * evaluates that operator on that operands
22: * both must be of type Double
23: * result is of type Boolean
24: */
25: public Object evaluate(Object left, Object right)
26: throws BadOperandTypeException {
27: if (!(left instanceof Double))
28: throw new BadOperandTypeException(left, "Double");
29: if (!(right instanceof Double))
30: throw new BadOperandTypeException(right, "Double");
31: if (type == EQUAL)
32: return new Boolean(
33: ((Double) left).doubleValue() == ((Double) right)
34: .doubleValue());
35: else if (type == NOT_EQUAL)
36: return new Boolean(
37: ((Double) left).doubleValue() != ((Double) right)
38: .doubleValue());
39: else if (type == LESS)
40: return new Boolean(
41: ((Double) left).doubleValue() < ((Double) right)
42: .doubleValue());
43: else if (type == LESS_OR_EQUAL)
44: return new Boolean(
45: ((Double) left).doubleValue() <= ((Double) right)
46: .doubleValue());
47: else if (type == GREATER)
48: return new Boolean(
49: ((Double) left).doubleValue() > ((Double) right)
50: .doubleValue());
51: else
52: //if ( type == GREATER_OR_EQUAL )
53: return new Boolean(
54: ((Double) left).doubleValue() >= ((Double) right)
55: .doubleValue());
56: }
57:
58: static int getPriority(int op, int position)
59: throws UnsupportedOperatorException {
60: switch (op) {
61: case EQUAL:
62: return COMPARE_EQUAL_PRIORITY;
63: case NOT_EQUAL:
64: return COMPARE_EQUAL_PRIORITY;
65: case LESS:
66: return COMPARE_LESS_PRIORITY;
67: case LESS_OR_EQUAL:
68: return COMPARE_LESS_PRIORITY;
69: case GREATER:
70: return COMPARE_LESS_PRIORITY;
71: case GREATER_OR_EQUAL:
72: return COMPARE_LESS_PRIORITY;
73: default:
74: throw new UnsupportedOperatorException(
75: CompareOperator.class, op, position);
76: }
77: }
78:
79: }
|