1 /***
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package net.sourceforge.pmd.cpd;
5
6 import java.util.Comparator;
7 import java.util.List;
8
9 public class MarkComparator implements Comparator {
10
11 private final int comparisonUpdateInterval;
12 private CPDListener l;
13 private long comparisons;
14 private List tokens;
15
16 public MarkComparator(CPDListener l, List tokens) {
17 this(l, tokens, 10000);
18 }
19
20 public MarkComparator(CPDListener l, List tokens, int comparisonUpdateInterval) {
21 this.l = l;
22 this.tokens = tokens;
23 this.comparisonUpdateInterval = comparisonUpdateInterval;
24 }
25
26 public int compare(Object o1, Object o2) {
27 comparisons++;
28 if (comparisons % comparisonUpdateInterval == 0) {
29 l.comparisonCountUpdate(comparisons);
30 }
31
32 Mark mark1 = (Mark)o1;
33 Mark mark2 = (Mark)o2;
34 for (int i = 1; i < tokens.size(); i++) {
35 int cmp = tokenAt(i, mark1).compareTo(tokenAt(i, mark2));
36 if (cmp != 0) {
37 return cmp;
38 }
39 }
40 return 0;
41 }
42
43 public TokenEntry tokenAt(int index, Mark mark) {
44 return (TokenEntry)tokens.get((index + mark.getIndexIntoTokenArray()) % tokens.size());
45 }
46 }
This page was automatically generated by Maven