OSDN Git Service

Delete Subversion Tags (Revision, Id)
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / result / AbstractComparisonResultSet.java
1 package jp.sourceforge.stigmata.result;
2
3 import java.lang.reflect.Array;
4 import java.util.ArrayList;
5 import java.util.Iterator;
6 import java.util.List;
7
8 import jp.sourceforge.stigmata.BirthmarkContext;
9 import jp.sourceforge.stigmata.BirthmarkEnvironment;
10 import jp.sourceforge.stigmata.BirthmarkSet;
11 import jp.sourceforge.stigmata.ComparisonPair;
12 import jp.sourceforge.stigmata.ComparisonResultSet;
13 import jp.sourceforge.stigmata.ExtractionResultSet;
14
15 /**
16  * Abstract class for ComparisonResultSet.
17  *
18  * @author Haruaki Tamada
19  */
20 public abstract class AbstractComparisonResultSet implements ComparisonResultSet{
21     protected ExtractionResultSet extraction;
22     private int count = -1;
23
24     public AbstractComparisonResultSet(ExtractionResultSet extraction){
25         this.extraction = extraction;
26     }
27
28     @Override
29     public abstract Iterator<ComparisonPair> iterator();
30
31     @Override
32     public abstract Iterator<BirthmarkSet> pairSources();
33
34     @Override
35     public synchronized BirthmarkSet[] getPairSources(){
36         return AbstractComparisonResultSet.<BirthmarkSet>getArrays(pairSources(), new BirthmarkSet[0]);
37     }
38
39     @Override
40     public int getPairCount(){
41         if(count < 0){
42             int calculateCount = 0;
43             for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){
44                 calculateCount++;
45                 i.next();
46             }
47             this.count = calculateCount;
48         }
49         return count;
50     }
51
52     @Override
53     public synchronized ComparisonPair[] getPairs(){
54         return AbstractComparisonResultSet.<ComparisonPair>getArrays(iterator(), new ComparisonPair[0]);
55     }
56
57     @Override
58     public ComparisonPair getPairAt(int index){
59         int currentIndex = 0;
60         for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){
61             ComparisonPair pair = i.next();
62             if(currentIndex == index){
63                 return pair;
64             }
65             currentIndex++;
66         }
67         return null;
68     }
69
70     @Override
71     public BirthmarkContext getContext(){
72         return extraction.getContext();
73     }
74
75     @Override
76     public BirthmarkEnvironment getEnvironment(){
77         return extraction.getEnvironment();
78     }
79
80     @SuppressWarnings("unchecked")
81     static synchronized <T> T[] getArrays(Iterator<T> i, T[] array){
82         List<Object> list = new ArrayList<Object>();
83         while(i.hasNext()){
84             list.add(i.next());
85         }
86
87         if(list.size() > array.length){
88             array = (T[])Array.newInstance(array.getClass().getComponentType(), list.size());
89         }
90         for(int index = 0; index < list.size(); index++){
91             array[index] = (T)list.get(index);
92         }
93         return array;
94     }
95 }