View Javadoc

1   package net.kwfgrid.gworkflowdl.analysis;
2   
3   /***
4    * Created by IntelliJ IDEA.
5    * User: hans
6    * Date: 11.10.2005
7    * Time: 13:06:28
8    * To change this template use File | Settings | File Templates.
9    */
10  public class Marking {
11      int N;
12      private int token[];
13  
14      public Marking(int n) {
15          N = n;
16          token = new int[N];
17          for (int i = 0; i < N; i++) {
18              token[i] = 0;
19          }
20      }
21  
22      public Marking(int[] toks) {
23          N = toks.length;
24          token = toks;
25      }
26  
27      public Marking(Marking m) {
28          N = m.N;
29          token = new int[N];
30          for (int i = 0; i < N; i++) {
31              token[i] = m.get(i);
32          }
33      }
34  
35      public Marking(int N, int val) {
36          this.N = N;
37          token = new int[N];
38          for (int i = 0; i < N; i++) {
39              token[i] = val;
40          }
41  
42      }
43  
44  
45      void set(int i, int val) {
46          token[i] = val;
47      }
48  
49      int get(int i) {
50          return token[i];
51      }
52  
53      public Object clone() {
54          Marking c = new Marking(N);
55          for (int i = 0; i < N; i++) {
56              c.token[i] = token[i];
57          }
58          return c;
59      }
60  
61      public static boolean equals(Marking m1, Marking m2) {
62           if (m1.N != m2.N) return false;
63          boolean ret = true;
64          for (int i = 0; i < m1.N; i++) {
65              if (m1.get(i) != m2.get(i)) {
66                  ret = false;
67              }
68          }
69          return ret;
70      }
71  
72      public boolean equals(Object object) {
73           Marking m = (Marking) object;
74              if (N != m.N) return false;
75              boolean ret = true;
76              for (int i = 0; i < N; i++) {
77                  if (get(i) != m.get(i)) {
78                      ret = false;
79                  }
80              }
81              return ret;
82          }
83  
84  
85      public int hashCode() {
86          int code = 0;
87          for (int i = 0; i < N; i++) {
88              code += (i+1) * get(i);
89          }
90          return code;
91      }
92  
93      static boolean lessOrEqual(Marking m1, Marking m2) {
94          if (m2 == null) return true;
95          boolean ret = true;
96          for (int i = 0; i < m1.N; i++) {
97              if (m1.get(i) > m2.get(i)) {
98                  ret = false;
99              }
100         }
101         return ret;
102     }
103 
104     public void plus(Marking m) {
105         for (int i = 0; i < N; i++) {
106             if (get(i) == KarpMillerTree.INFINITY || m.get(i) == KarpMillerTree.INFINITY) {
107                 set(i, KarpMillerTree.INFINITY);
108             } else {
109                 set(i, get(i) + m.get(i));
110             }
111         }
112     }
113 
114     public static Marking plus(Marking m, Marking n) {
115         Marking ret = new Marking(m);
116         ret.plus(n);
117         return ret;
118     }
119 
120     public void minus(Marking m) {
121         for (int i = 0; i < N; i++) {
122             if (get(i) == KarpMillerTree.INFINITY) {
123                 set(i, KarpMillerTree.INFINITY);
124             } else {
125                 set(i, get(i) - m.get(i));
126             }
127         }
128     }
129 
130     public static Marking minus(Marking m, Marking n) {
131         Marking ret = new Marking(m);
132         ret.minus(n);
133         return ret;
134     }
135 
136     public String toString() {
137         String s = "(";
138         for (int i = 0; i < N; i++) {
139             String t = (i == KarpMillerTree.INFINITY) ? "infinity" : "" + get(i);
140             s += " " + t;
141         }
142         s += " )";
143         return s;
144     }
145 }
146