Skip to content

Method: hashCode()

1: package pruefskript.parser.nodes;
2:
3: import basic.PruefskriptConstants;
4: import pruefskript.CommunicationManager;
5: import pruefskript.parser.exceptions.CheckScriptException;
6: import pruefskript.parser.exceptions.WrongNodeException;
7: import pruefskript.parser.values.AbstractReturnValue;
8: import pruefskript.parser.values.NumericValue;
9:
10: /**
11: * ModNode.
12: *
13: * @author Group B5
14: *
15: */
16: public class ModNode extends AbstractBinaryOperationNode {
17:         /**
18:          * ModNode.
19:          *
20:          * @param operand1
21:          * AbstractNode
22:          * @param operand2
23:          * AbstractNode
24:          */
25:         public ModNode(final AbstractNode operand1, final AbstractNode operand2) {
26:                 super(operand1, operand2);
27:         }
28:
29:         @Override
30:         public String toString() {
31:                 return PruefskriptConstants.MODNODETITLE + PruefskriptConstants.BRACKET_OPEN
32:                                 + super.toString() + PruefskriptConstants.BRACKET_CLOSE;
33:         }
34:
35:         @Override
36:         public boolean equals(final Object obj) {
37:                 return super.equals(obj) && obj instanceof ModNode;
38:
39:         }
40:
41:         @Override
42:         public int hashCode() {
43:                 return super.hashCode() + PruefskriptConstants.MODNODE_HASHCODE;
44:         }
45:
46:         /**
47:          * Die beiden Operanten 1 und 2 werden ausgewertet und wenn beide einen numerischen Wert haben,
48:          * wird der Modulo von den beiden Werten berechnet und zurueckgegeben. Ansonsten wird eine
49:          * Exception geworfen.
50:          */
51:         @Override
52:         public NumericValue interpret(final CommunicationManager mgr) throws CheckScriptException {
53:                 final AbstractReturnValue op1 = this.getOperand1().interpret(mgr);
54:                 final AbstractReturnValue op2 = this.getOperand2().interpret(mgr);
55:                 if (op1.isNumericValue() && op2.isNumericValue()) {
56:                         return new NumericValue(
57:                                         op1.toNumericValue().getValue() % op2.toNumericValue().getValue());
58:                 } else {
59:                         throw new WrongNodeException(PruefskriptConstants.UNEXPECTED_NUM_OPERATION);
60:                 }
61:
62:         }
63: }