/**
* License Agreement for OpenSearchServer
*
* Copyright (C) 2008-2012 Emmanuel Keller / Jaeksoft
*
* http://www.open-search-server.com
*
* This file is part of OpenSearchServer.
*
* OpenSearchServer is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenSearchServer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenSearchServer.
* If not, see <http://www.gnu.org/licenses/>.
**/
package com.jaeksoft.searchlib.sort;
import it.unimi.dsi.fastutil.Arrays;
import it.unimi.dsi.fastutil.ints.IntComparator;
import com.jaeksoft.searchlib.SearchLibException;
import com.jaeksoft.searchlib.result.collector.CollectorInterface;
import com.jaeksoft.searchlib.util.Timer;
public abstract class SorterAbstract implements IntComparator {
private final CollectorInterface collector;
protected SorterAbstract(final CollectorInterface collector) {
this.collector = collector;
}
public abstract String toString(int pos);
@Override
final public int compare(final Integer pos1, final Integer pos2) {
return compare((int) pos1, (int) pos2);
}
public void quickSort(Timer timer) {
int numFound = collector.getSize();
Timer t = new Timer(timer, "Sort (quicksort): " + numFound);
Arrays.parallelQuickSort(0, numFound, this, collector);
t.end(null);
}
public void check(Timer timer) {
int l = collector.getSize();
if (l == 0)
return;
Timer t = new Timer(timer, "Check sort (quicksort) " + l);
int last = 0;
int err = 0;
for (int i = 1; i < l; i++) {
if (compare(last, i) > 0) {
System.out.println(last + ": " + toString(last) + " - " + i
+ ": " + toString(i));
err++;
}
last = i;
}
if (err > 0)
System.out.println("SORT ERROR: " + err + " / " + l);
t.getDuration();
}
public abstract boolean isScore();
public abstract boolean isDistance();
public static class NoCollectorException extends SearchLibException {
/**
*
*/
private static final long serialVersionUID = 8408101032556966875L;
NoCollectorException(Object... msg) {
super(msg);
}
}
}