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