diff --git a/source/net/yacy/kelondro/order/Array.java b/source/net/yacy/cora/storage/Array.java
similarity index 79%
rename from source/net/yacy/kelondro/order/Array.java
rename to source/net/yacy/cora/storage/Array.java
index 0c9def3e1..e9c6a4415 100644
--- a/source/net/yacy/kelondro/order/Array.java
+++ b/source/net/yacy/cora/storage/Array.java
@@ -1,35 +1,63 @@
-package net.yacy.kelondro.order;
+/**
+ * Array
+ * Copyright 2011 by Michael Peter Christen, mc@yacy.net, Frankfurt a. M., Germany
+ * First released 16.07.2011 at http://yacy.net
+ *
+ * $LastChangedDate: 2011-05-30 10:53:58 +0200 (Mo, 30 Mai 2011) $
+ * $LastChangedRevision: 7759 $
+ * $LastChangedBy: orbiter $
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program in the file lgpl21.txt
+ * If not, see .
+ */
+
+package net.yacy.cora.storage;
import java.util.ArrayList;
import java.util.Random;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.locks.AbstractQueuedSynchronizer;
+
/**
* an abstraction of the quicksort from the java.util.Array class
* @author admin
*
*/
+@SuppressWarnings({ "rawtypes", "unchecked" })
public class Array {
- private final static int SORT_JOBS = Runtime.getRuntime().availableProcessors() + 1;
- @SuppressWarnings({ "unchecked", "rawtypes" })
+ private final static int SORT_JOBS = Math.max(1, Runtime.getRuntime().availableProcessors() / 2);
private final static SortJob> POISON_JOB_WORKER = new SortJob(null, 0, 0, 0, 0, null);
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private final static BlockingQueue> sortJobs = new LinkedBlockingQueue();
+ private static BlockingQueue> sortJobs = null;
static {
- for (int i = 0; i < SORT_JOBS; i++) {
- new SortJobWorker().start();
+ if (SORT_JOBS > 1) {
+ for (int i = 0; i < SORT_JOBS; i++) {
+ new SortJobWorker().start();
+ }
+ sortJobs = new LinkedBlockingQueue();
}
}
public static void terminate() {
- for (int i = 0; i < SORT_JOBS; i++) {
- try {
- sortJobs.put(POISON_JOB_WORKER);
- } catch (final InterruptedException e) {}
+ if (SORT_JOBS > 1 && sortJobs != null) {
+ for (int i = 0; i < SORT_JOBS; i++) {
+ try {
+ sortJobs.put(POISON_JOB_WORKER);
+ } catch (final InterruptedException e) {}
+ }
}
}
@@ -46,48 +74,6 @@ public class Array {
}
}
- public static final class UpDownLatch extends AbstractQueuedSynchronizer {
-
- private static final long serialVersionUID = 1L;
-
- public UpDownLatch(final int count) {
- setState(count);
- }
-
- public int getCount() {
- return getState();
- }
-
- public int tryAcquireShared(final int acquires) {
- return getState() == 0? 1 : -1;
- }
-
- public boolean tryReleaseShared(final int releases) {
- // Decrement count; signal when transition to zero
- for (;;) {
- final int c = getState();
- if (c == 0) return false;
- final int nextc = c-1;
- if (compareAndSetState(c, nextc)) return nextc == 0;
- }
- }
-
- public void countUp() {
- for (;;) {
- final int c = getState();
- if (compareAndSetState(c, c + 1)) return;
- }
- }
-
- public void countDown() {
- releaseShared(1);
- }
-
- public void await() throws InterruptedException {
- acquireSharedInterruptibly(1);
- }
- }
-
public static void sort(final Sortable x) {
UpDownLatch latch;
final boolean threaded = false;//x.size() > 100000;
@@ -156,8 +142,8 @@ public class Array {
if ((s = b - a) > 1) {
final SortJob nextJob = new SortJob(job.x, job.o, s, job.f, job.depth + 1, job.latch);
if (threaded) try {
- job.latch.countUp();
sortJobs.put(nextJob);
+ job.latch.countUp();
} catch (final InterruptedException e) {
} else {
sort(nextJob, threaded);
@@ -166,8 +152,8 @@ public class Array {
if ((s = d - c) > 1) {
final SortJob nextJob = new SortJob(job.x, n - s, s, job.x.buffer(), job.depth + 1, job.latch);
if (threaded) try {
- job.latch.countUp();
sortJobs.put(nextJob);
+ job.latch.countUp();
} catch (final InterruptedException e) {
} else {
sort(nextJob, threaded);
diff --git a/source/net/yacy/cora/storage/Sortable.java b/source/net/yacy/cora/storage/Sortable.java
new file mode 100644
index 000000000..8a96e4f35
--- /dev/null
+++ b/source/net/yacy/cora/storage/Sortable.java
@@ -0,0 +1,41 @@
+/**
+ * Sortable
+ * Copyright 2011 by Michael Peter Christen, mc@yacy.net, Frankfurt a. M., Germany
+ * First released 16.07.2011 at http://yacy.net
+ *
+ * $LastChangedDate: 2011-05-30 10:53:58 +0200 (Mo, 30 Mai 2011) $
+ * $LastChangedRevision: 7759 $
+ * $LastChangedBy: orbiter $
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program in the file lgpl21.txt
+ * If not, see .
+ */
+
+package net.yacy.cora.storage;
+
+import java.util.Comparator;
+
+public interface Sortable extends Comparator {
+
+ public int size();
+
+ public A get(final int index, final boolean clone);
+
+ public void delete(int i);
+
+ public A buffer();
+
+ public void swap(int i, int j, A buffer);
+
+}
diff --git a/source/net/yacy/cora/storage/UpDownLatch.java b/source/net/yacy/cora/storage/UpDownLatch.java
new file mode 100644
index 000000000..2da9be7f9
--- /dev/null
+++ b/source/net/yacy/cora/storage/UpDownLatch.java
@@ -0,0 +1,69 @@
+/**
+ * UpDownLatch
+ * Copyright 2011 by Michael Peter Christen, mc@yacy.net, Frankfurt a. M., Germany
+ * First released 16.07.2011 at http://yacy.net
+ *
+ * $LastChangedDate: 2011-05-30 10:53:58 +0200 (Mo, 30 Mai 2011) $
+ * $LastChangedRevision: 7759 $
+ * $LastChangedBy: orbiter $
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program in the file lgpl21.txt
+ * If not, see .
+ */
+
+package net.yacy.cora.storage;
+
+import java.util.concurrent.locks.AbstractQueuedSynchronizer;
+
+public class UpDownLatch extends AbstractQueuedSynchronizer {
+
+ private static final long serialVersionUID = 1L;
+
+ public UpDownLatch(final int count) {
+ setState(count);
+ }
+
+ public int getCount() {
+ return getState();
+ }
+
+ public int tryAcquireShared(final int acquires) {
+ return getState() == 0? 1 : -1;
+ }
+
+ public boolean tryReleaseShared(final int releases) {
+ // Decrement count; signal when transition to zero
+ for (;;) {
+ final int c = getState();
+ if (c == 0) return false;
+ final int nextc = c-1;
+ if (compareAndSetState(c, nextc)) return nextc == 0;
+ }
+ }
+
+ public void countUp() {
+ for (;;) {
+ final int c = getState();
+ if (compareAndSetState(c, c + 1)) return;
+ }
+ }
+
+ public void countDown() {
+ releaseShared(1);
+ }
+
+ public void await() throws InterruptedException {
+ acquireSharedInterruptibly(1);
+ }
+}
diff --git a/source/net/yacy/kelondro/index/RowCollection.java b/source/net/yacy/kelondro/index/RowCollection.java
index d2b25e091..417f21cc6 100644
--- a/source/net/yacy/kelondro/index/RowCollection.java
+++ b/source/net/yacy/kelondro/index/RowCollection.java
@@ -34,13 +34,13 @@ import java.util.concurrent.Callable;
import net.yacy.cora.document.ASCII;
import net.yacy.cora.document.UTF8;
+import net.yacy.cora.storage.Array;
+import net.yacy.cora.storage.Sortable;
import net.yacy.kelondro.index.Row.Entry;
import net.yacy.kelondro.logging.Log;
-import net.yacy.kelondro.order.Array;
import net.yacy.kelondro.order.Base64Order;
import net.yacy.kelondro.order.ByteOrder;
import net.yacy.kelondro.order.NaturalOrder;
-import net.yacy.kelondro.order.Sortable;
import net.yacy.kelondro.util.FileUtils;
import net.yacy.kelondro.util.MemoryControl;
import net.yacy.kelondro.util.kelondroException;
@@ -613,7 +613,7 @@ public class RowCollection implements Sortable, Iterable,
}
public final void sort() {
- net.yacy.kelondro.order.Array.sort(this);
+ net.yacy.cora.storage.Array.sort(this);
this.sortBound = size();
}
diff --git a/source/net/yacy/kelondro/order/Sortable.java b/source/net/yacy/kelondro/order/Sortable.java
deleted file mode 100644
index 509e64f8e..000000000
--- a/source/net/yacy/kelondro/order/Sortable.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package net.yacy.kelondro.order;
-
-import java.util.Comparator;
-
-public interface Sortable extends Comparator {
-
- public int size();
-
- public A get(final int index, final boolean clone);
-
- public void delete(int i);
-
- public A buffer();
-
- public void swap(int i, int j, A buffer);
-
-}
diff --git a/source/net/yacy/yacy.java b/source/net/yacy/yacy.java
index 177699b0b..b5c75d8da 100644
--- a/source/net/yacy/yacy.java
+++ b/source/net/yacy/yacy.java
@@ -50,6 +50,7 @@ import net.yacy.cora.document.ASCII;
import net.yacy.cora.protocol.ClientIdentification;
import net.yacy.cora.protocol.RequestHeader;
import net.yacy.cora.protocol.http.HTTPClient;
+import net.yacy.cora.storage.Array;
import net.yacy.cora.storage.OrderedScoreMap;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.gui.YaCyApp;
@@ -59,7 +60,6 @@ import net.yacy.kelondro.data.meta.URIMetadataRow;
import net.yacy.kelondro.data.word.Word;
import net.yacy.kelondro.data.word.WordReference;
import net.yacy.kelondro.logging.Log;
-import net.yacy.kelondro.order.Array;
import net.yacy.kelondro.order.Base64Order;
import net.yacy.kelondro.rwi.Reference;
import net.yacy.kelondro.rwi.ReferenceContainer;