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