1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package net.sf.magicproject.operation;
21
22 import java.io.IOException;
23 import java.io.InputStream;
24
25 import net.sf.magicproject.expression.Expression;
26
27
28 /***
29 * Reprsent an operation.
30 *
31 * @author <a href="mailto:fabdouglas@users.sourceforge.net">Fabrice Daugan </a>
32 */
33 public abstract class Operation {
34
35 /***
36 * Creates a new instance of Operation <br>
37 */
38 protected Operation() {
39 super();
40 }
41
42 /***
43 * return the next Expression read from the current offset
44 *
45 * @param inputFile
46 * is the file containing this expression
47 * @return the next Expression read from the current offset
48 * @throws IOException
49 * if error occured during the reading process from the specified
50 * input stream
51 */
52 public abstract Expression readNextExpression(InputStream inputFile)
53 throws IOException;
54
55 /***
56 * Process a binary operation with two values and return the result.
57 *
58 * @param leftValue
59 * the left value of binary operation
60 * @param rightValue
61 * the right value of binary operation
62 * @return the result
63 */
64 public abstract int process(int leftValue, int rightValue);
65
66 /***
67 * Return operator name
68 *
69 * @return the operator name
70 */
71 public abstract String getOperator();
72
73 /***
74 * Is this operation is useless or not
75 *
76 * @param leftValue
77 * the left value
78 * @param rightValue
79 * the right value
80 * @return true if this operation will not modify the given left value
81 * considering the right value.
82 */
83 public boolean isUselessWith(int leftValue, int rightValue) {
84 return leftValue == process(leftValue, rightValue);
85 }
86 }