1 package jp.sourceforge.stigmata.result;
3 import java.lang.reflect.Array;
4 import java.util.ArrayList;
5 import java.util.Iterator;
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;
16 * Abstract class for ComparisonResultSet.
18 * @author Haruaki Tamada
20 public abstract class AbstractComparisonResultSet implements ComparisonResultSet{
21 protected ExtractionResultSet extraction;
22 private int count = -1;
24 public AbstractComparisonResultSet(ExtractionResultSet extraction){
25 this.extraction = extraction;
29 public abstract Iterator<ComparisonPair> iterator();
32 public abstract Iterator<BirthmarkSet> pairSources();
35 public synchronized BirthmarkSet[] getPairSources(){
36 return AbstractComparisonResultSet.<BirthmarkSet>getArrays(pairSources(), new BirthmarkSet[0]);
40 public int getPairCount(){
42 int calculateCount = 0;
43 for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){
47 this.count = calculateCount;
53 public synchronized ComparisonPair[] getPairs(){
54 return AbstractComparisonResultSet.<ComparisonPair>getArrays(iterator(), new ComparisonPair[0]);
58 public ComparisonPair getPairAt(int index){
60 for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){
61 ComparisonPair pair = i.next();
62 if(currentIndex == index){
71 public BirthmarkContext getContext(){
72 return extraction.getContext();
76 public BirthmarkEnvironment getEnvironment(){
77 return extraction.getEnvironment();
80 @SuppressWarnings("unchecked")
81 static synchronized <T> T[] getArrays(Iterator<T> i, T[] array){
82 List<Object> list = new ArrayList<Object>();
87 if(list.size() > array.length){
88 array = (T[])Array.newInstance(array.getClass().getComponentType(), list.size());
90 for(int index = 0; index < list.size(); index++){
91 array[index] = (T)list.get(index);