View Javadoc

1   package com.tapina.robe.runtime;
2   
3   import java.io.Writer;
4   import java.io.IOException;
5   
6   /***
7    * Created by IntelliJ IDEA.
8    * User: gareth
9    * Date: Aug 21, 2003
10   * Time: 8:00:02 AM
11   */
12  public abstract class Instruction {
13      public static int count = 0;
14      private final Condition condition;
15  
16      public Instruction(Condition condition) {
17          this.condition = condition;
18      }
19  
20      /***
21       * @param environment
22       * @return true if the pipeline should be flushed (i.e. branch has occurred)
23       */
24      public final boolean checkAndExecute(Environment environment) {
25          count++;
26          if (isConditionSatisfied(environment)) {
27              return execute(environment);
28          } else {
29              return false;
30          }
31      }
32  
33      /***
34       * Try to avoid having much in the way of conditionals in this method - it should execute straight through
35       * and be as easily optimised/inlined as possible for speed. Do all your ifs and buts in the decoder or
36       * the constructor to this class.
37       * @param environment
38       * @return true if the pipeline should be flushed (i.e. branch has occurred)
39       */
40      protected abstract boolean execute(Environment environment);
41  
42      private boolean isConditionSatisfied(Environment environment) {
43          return condition.isSatisfied(environment.getCpu());
44      }
45  
46      protected final void dumpCondition(Writer out) throws IOException {
47          if (condition != Condition.AL) {
48              out.write(" if (");
49              out.write(condition.toJavaExpression());
50              out.write(") ");
51          }
52      }
53  
54      public final void dumpJavaSource(Writer out) throws IOException {
55          out.write(" // " + toString() + "\n");
56  
57          dumpCondition(out);
58          out.write("{\n");
59          dumpJavaSourceUnconditional(out);
60          out.write("}\n");
61      }
62  
63      public abstract void dumpJavaSourceUnconditional(Writer out) throws IOException;
64  }