1 package org.qedeq.kernel.se.visitor;
2
3
4
5
6
7
8
9 public class QedeqNumbers {
10
11
12 private int imports;
13
14
15 private int chapters;
16
17
18 private int sections;
19
20
21 private int subsectionsAndNodes;
22
23
24 private int importNumber;
25
26
27 private boolean chapterNumbering;
28
29
30 private int chapterNumber;
31
32
33 private int absoluteChapterNumber;
34
35
36 private boolean sectionNumbering;
37
38
39 private int sectionNumber;
40
41
42 private int absoluteSectionNumber;
43
44
45 private int subsectionNumber;
46
47
48 private int nodeNumber;
49
50
51 private int axiomNumber;
52
53
54 private int functionDefinitionNumber;
55
56
57 private int predicateDefinitionNumber;
58
59
60 private int propositionNumber;
61
62
63 private int ruleNumber;
64
65
66 private boolean finished;
67
68
69
70
71
72
73
74 public QedeqNumbers(final int imports, final int chapters) {
75 this.imports = imports;
76 this.chapters = chapters;
77 }
78
79
80
81
82
83
84 public QedeqNumbers(final QedeqNumbers original) {
85 imports = original.imports;
86 chapters = original.chapters;
87 sections = original.sections;
88 subsectionsAndNodes = original.subsectionsAndNodes;
89 importNumber = original.importNumber;
90 chapterNumbering = original.chapterNumbering;
91 chapterNumber = original.chapterNumber;
92 absoluteChapterNumber = original.absoluteChapterNumber;
93 sectionNumbering = original.sectionNumbering;
94 nodeNumber = original.nodeNumber;
95 sectionNumber = original.sectionNumber;
96 absoluteSectionNumber = original.absoluteSectionNumber;
97 subsectionNumber = original.subsectionNumber;
98 axiomNumber = original.axiomNumber;
99 functionDefinitionNumber = original.functionDefinitionNumber;
100 predicateDefinitionNumber = original.predicateDefinitionNumber;
101 propositionNumber = original.propositionNumber;
102 ruleNumber = original.ruleNumber;
103 finished = original.finished;
104 }
105
106
107
108
109
110
111 public int getImportNumber() {
112 return importNumber;
113 }
114
115
116
117
118 public void increaseImportNumber() {
119 importNumber++;
120 }
121
122
123
124
125
126
127 public int getChapterNumber() {
128 return chapterNumber;
129 }
130
131
132
133
134
135
136
137 public void increaseChapterNumber(final int sections, final boolean chapterNumbering) {
138 this.chapterNumbering = chapterNumbering;
139 absoluteChapterNumber++;
140 if (chapterNumbering) {
141 chapterNumber++;
142 }
143 this.sections = sections;
144 this.subsectionsAndNodes = 0;
145 this.sectionNumber = 0;
146 this.absoluteSectionNumber = 0;
147 this.sectionNumbering = true;
148 this.subsectionNumber = 0;
149 this.nodeNumber = 0;
150 }
151
152
153
154
155
156
157 public boolean isChapterNumbering() {
158 return chapterNumbering;
159 }
160
161
162
163
164
165
166 public int getAbsoluteChapterNumber() {
167 return absoluteChapterNumber;
168 }
169
170
171
172
173
174
175 public int getSectionNumber() {
176 return sectionNumber;
177 }
178
179
180
181
182
183
184
185 public void increaseSectionNumber(final int subsectionsAndNodes,
186 final boolean sectionNumbering) {
187 this.subsectionsAndNodes = subsectionsAndNodes;
188 this.sectionNumbering = sectionNumbering;
189 absoluteSectionNumber++;
190 if (sectionNumbering) {
191 sectionNumber++;
192 }
193 subsectionNumber = 0;
194 nodeNumber = 0;
195 }
196
197
198
199
200
201
202 public int getAbsoluteSectionNumber() {
203 return absoluteSectionNumber;
204 }
205
206
207
208
209
210
211 public boolean isSectionNumbering() {
212 return sectionNumbering;
213 }
214
215
216
217
218
219
220 public int getSubsectionNumber() {
221 return subsectionNumber;
222 }
223
224
225
226
227 public void increaseSubsectionNumber() {
228 subsectionNumber++;
229 }
230
231
232
233
234
235
236 public int getNodeNumber() {
237 return nodeNumber;
238 }
239
240
241
242
243 public void increaseNodeNumber() {
244 nodeNumber++;
245 }
246
247
248
249
250
251
252 public int getAxiomNumber() {
253 return axiomNumber;
254 }
255
256
257
258
259 public void increaseAxiomNumber() {
260 axiomNumber++;
261 }
262
263
264
265
266
267
268 public int getFunctionDefinitionNumber() {
269 return functionDefinitionNumber;
270 }
271
272
273
274
275 public void increaseFunctionDefinitionNumber() {
276 functionDefinitionNumber++;
277 }
278
279
280
281
282
283
284 public int getPredicateDefinitionNumber() {
285 return predicateDefinitionNumber;
286 }
287
288
289
290
291 public void increasePredicateDefinitionNumber() {
292 predicateDefinitionNumber++;
293 }
294
295
296
297
298
299
300 public int getPropositionNumber() {
301 return propositionNumber;
302 }
303
304
305
306
307 public void increasePropositionNumber() {
308 propositionNumber++;
309 }
310
311
312
313
314
315
316 public int getRuleNumber() {
317 return ruleNumber;
318 }
319
320
321
322
323 public void increaseRuleNumber() {
324 ruleNumber++;
325 }
326
327
328
329
330
331
332 public boolean isFinished() {
333 return finished;
334 }
335
336
337
338
339
340
341 public void setFinished(final boolean finished) {
342 this.finished = finished;
343 }
344
345
346
347
348
349
350
351 public double getVisitPercentage() {
352 if (finished) {
353 return 100;
354 }
355 double result = (double) (importNumber) / (imports + 1) / (chapters + 3);
356 result += (double) (absoluteChapterNumber) / (chapters + 3);
357 result += (double) (absoluteSectionNumber) / (sections + 2) / (chapters + 3);
358 result += (double) (subsectionNumber + nodeNumber)
359 / (subsectionsAndNodes + 2) / (sections + 2) / (chapters + 3);
360 return 100 * result;
361 }
362
363 public boolean equals(final Object compare) {
364 if (!(compare instanceof QedeqNumbers)) {
365 return false;
366 }
367 final QedeqNumbers other = (QedeqNumbers) compare;
368 return imports == other.imports && importNumber == other.importNumber
369 && chapterNumbering == other.chapterNumbering
370 && absoluteChapterNumber == other.absoluteChapterNumber
371 && sectionNumbering == other.sectionNumbering
372 && sections == other.sections
373 && absoluteSectionNumber == other.absoluteSectionNumber
374 && subsectionNumber == other.subsectionNumber
375 && nodeNumber == other.nodeNumber
376 && axiomNumber == other.axiomNumber
377 && propositionNumber == other.propositionNumber
378 && predicateDefinitionNumber == other.predicateDefinitionNumber
379 && functionDefinitionNumber == other.functionDefinitionNumber
380 && ruleNumber == other.ruleNumber;
381 }
382
383 public int hashCode() {
384 return imports ^ (importNumber * 4)
385 ^ (chapters * 16) ^ (absoluteChapterNumber * 64)
386 ^ (sections * 256) ^ (absoluteSectionNumber * 1024)
387 ^ (subsectionsAndNodes * 4096) ^ (nodeNumber * 16384) ^ (subsectionNumber * 65536)
388 ^ (axiomNumber * 262144) ^ (propositionNumber * 1048576)
389 ^ (predicateDefinitionNumber * 4194304)
390 ^ (functionDefinitionNumber * 16777216) ^ (ruleNumber * 67108864);
391 }
392
393 public String toString() {
394 return "(" + importNumber + "/" + imports + " I) "
395 + "(" + absoluteChapterNumber + "/" + chapters + " C) "
396 + "(" + absoluteSectionNumber + "/" + sections + " S) "
397 + "(" + (subsectionNumber + nodeNumber) + "/" + subsectionsAndNodes + ")";
398 }
399
400 }