added some modifications recommended by PMD for better performance

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@6560 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 15 years ago
parent d1973bae2a
commit d77a8f3b3e

@ -161,7 +161,6 @@ public void processDomain(HashMap props) {
public void processCitation(String host, HashMap props) {
//println("Citation: " + props.toString());
String id = (String) props.get("id"); if (id == null) id = "";
int count = 0;
try {
String counts = (String) props.get("count"); if (counts != null) count = Integer.parseInt(counts);
} catch (NumberFormatException e) {}

@ -77,7 +77,7 @@ public class Balancer {
// create a stack for newly entered entries
if (!(cachePath.exists())) cachePath.mkdir(); // make the path
cacheStacksPath.mkdirs();
File f = new File(cacheStacksPath, stackname + indexSuffix);
final File f = new File(cacheStacksPath, stackname + indexSuffix);
try {
urlFileIndex = new Table(f, Request.rowdef, EcoFSBufferSize, 0, useTailCache, exceed134217727);
} catch (RowSpaceExceededException e) {
@ -177,7 +177,7 @@ public class Balancer {
assert urlFileIndex.size() + removedCounter == s : "urlFileIndex.size() = " + urlFileIndex.size() + ", s = " + s;
// iterate through the top list
Iterator<String> j = top.iterator();
final Iterator<String> j = top.iterator();
String urlhash;
while (j.hasNext()) {
urlhash = j.next();
@ -186,7 +186,7 @@ public class Balancer {
// remove from delayed
synchronized (this.delayed) {
Iterator<Map.Entry<Long, String>> k = this.delayed.entrySet().iterator();
final Iterator<Map.Entry<Long, String>> k = this.delayed.entrySet().iterator();
while (k.hasNext()) {
if (urlHashes.contains(k.next().getValue())) k.remove();
}
@ -199,7 +199,7 @@ public class Balancer {
while (q.hasNext()) {
se = q.next();
stack = se.getValue();
Iterator<String> i = stack.iterator();
final Iterator<String> i = stack.iterator();
while (i.hasNext()) {
if (urlHashes.contains(i.next())) i.remove();
}
@ -240,7 +240,7 @@ public class Balancer {
public void push(final Request entry) throws IOException, RowSpaceExceededException {
assert entry != null;
String hash = entry.url().hash();
final String hash = entry.url().hash();
synchronized (this) {
if (urlFileIndex.has(hash.getBytes())) {
//Log.logWarning("BALANCER", "double-check has failed for urlhash " + entry.url().hash() + " in " + stackname + " - fixed");
@ -248,7 +248,7 @@ public class Balancer {
}
// add to index
int s = urlFileIndex.size();
final int s = urlFileIndex.size();
urlFileIndex.put(entry.toRow());
assert s < urlFileIndex.size() : "hash = " + hash;
assert urlFileIndex.has(hash.getBytes()) : "hash = " + hash;
@ -258,7 +258,7 @@ public class Balancer {
}
}
private void pushHashToDomainStacks(final String hash, int maxstacksize) {
private void pushHashToDomainStacks(final String hash, final int maxstacksize) {
// extend domain stack
final String dom = hash.substring(6);
LinkedList<String> domainList = domainStacks.get(dom);
@ -276,9 +276,9 @@ public class Balancer {
private void removeHashFromDomainStacks(final String hash) {
// extend domain stack
final String dom = hash.substring(6);
LinkedList<String> domainList = domainStacks.get(dom);
final LinkedList<String> domainList = domainStacks.get(dom);
if (domainList == null) return;
Iterator<String> i = domainList.iterator();
final Iterator<String> i = domainList.iterator();
while (i.hasNext()) {
if (i.next().equals(hash)) {
i.remove();
@ -289,7 +289,7 @@ public class Balancer {
private String nextFromDelayed() {
if (this.delayed.isEmpty()) return null;
Long first = this.delayed.firstKey();
final Long first = this.delayed.firstKey();
if (first.longValue() < System.currentTimeMillis()) {
return this.delayed.remove(first);
}
@ -298,7 +298,7 @@ public class Balancer {
private String anyFromDelayed() {
if (this.delayed.isEmpty()) return null;
Long first = this.delayed.firstKey();
final Long first = this.delayed.firstKey();
return this.delayed.remove(first);
}
@ -376,7 +376,7 @@ public class Balancer {
// at this point we must check if the crawlEntry has relevancy because the crawl profile still exists
// if not: return null. A calling method must handle the null value and try again
CrawlProfile.entry profileEntry = (profile == null) ? null : profile.getEntry(crawlEntry.profileHandle());
final CrawlProfile.entry profileEntry = (profile == null) ? null : profile.getEntry(crawlEntry.profileHandle());
if (profileEntry == null) {
Log.logWarning("Balancer", "no profile entry for handle " + crawlEntry.profileHandle());
return null;
@ -435,7 +435,7 @@ public class Balancer {
return crawlEntry;
}
private void filltop(boolean delay, long maximumwaiting, boolean acceptonebest) {
private void filltop(final boolean delay, final long maximumwaiting, final boolean acceptonebest) {
if (!this.top.isEmpty()) return;
//System.out.println("*** DEBUG started filltop delay=" + ((delay) ? "true":"false") + ", maximumwaiting=" + maximumwaiting + ", acceptonebest=" + ((acceptonebest) ? "true":"false"));
@ -448,7 +448,7 @@ public class Balancer {
}
// iterate over the domain stacks
Iterator<Map.Entry<String, LinkedList<String>>> i = this.domainStacks.entrySet().iterator();
final Iterator<Map.Entry<String, LinkedList<String>>> i = this.domainStacks.entrySet().iterator();
Map.Entry<String, LinkedList<String>> entry;
long smallestWaiting = Long.MAX_VALUE;
String besthash = null;
@ -463,7 +463,7 @@ public class Balancer {
String n = entry.getValue().getFirst();
if (delay) {
long w = Latency.waitingRemainingGuessed(n, minimumLocalDelta, minimumGlobalDelta);
final long w = Latency.waitingRemainingGuessed(n, minimumLocalDelta, minimumGlobalDelta);
if (w > maximumwaiting) {
if (w < smallestWaiting) {
smallestWaiting = w;
@ -485,12 +485,12 @@ public class Balancer {
}
}
private void fillDomainStacks(int maxdomstacksize) throws IOException {
private void fillDomainStacks(final int maxdomstacksize) throws IOException {
if (!this.domainStacks.isEmpty() && System.currentTimeMillis() - lastDomainStackFill < 120000L) return;
this.domainStacks.clear();
//synchronized (this.delayed) { delayed.clear(); }
this.lastDomainStackFill = System.currentTimeMillis();
CloneableIterator<byte[]> i = this.urlFileIndex.keys(true, null);
final CloneableIterator<byte[]> i = this.urlFileIndex.keys(true, null);
while (i.hasNext()) {
pushHashToDomainStacks(new String(i.next()), 50);
if (this.domainStacks.size() > maxdomstacksize) break;
@ -501,12 +501,12 @@ public class Balancer {
public ArrayList<Request> top(int count) {
count = Math.min(count, top.size());
ArrayList<Request> cel = new ArrayList<Request>();
final ArrayList<Request> cel = new ArrayList<Request>();
if (count == 0) return cel;
synchronized (this) {
for (String n: top) {
try {
Row.Entry rowEntry = urlFileIndex.get(n.getBytes());
final Row.Entry rowEntry = urlFileIndex.get(n.getBytes());
if (rowEntry == null) continue;
final Request crawlEntry = new Request(rowEntry);
cel.add(crawlEntry);

@ -34,8 +34,6 @@ import net.yacy.kelondro.logging.Log;
import net.yacy.kelondro.util.FileUtils;
import net.yacy.kelondro.util.kelondroException;
import de.anomic.yacy.yacySeedDB;
public final class CrawlSwitchboard {
public static final String CRAWL_PROFILE_PROXY = "proxy";
@ -66,7 +64,6 @@ public final class CrawlSwitchboard {
private final File queuesRoot;
public CrawlSwitchboard(
final yacySeedDB peers,
final String networkName,
final Log log,
final File queuesRoot) {

@ -189,7 +189,7 @@ public class knwikiParser implements wikiParser {
private String text;
private final boolean nl;
public Text(final String text, final boolean escaped, final boolean newLineBefore) {
public Text(final String text, final boolean newLineBefore) {
this.text = text;
this.nl = newLineBefore;
}
@ -223,13 +223,13 @@ public class knwikiParser implements wikiParser {
if (text == null) return null;
if (text.length() < 2) return new Text[] {new Text(text, false, true) };
if (text.length() < 2) return new Text[] {new Text(text, true) };
final int startLen = escapeBegin.length();
final int endLen = escapeEnd.length();
final ArrayList<Text> r = new ArrayList<Text>();
boolean escaped = text.startsWith(escapeBegin);
if (escaped) r.add(new Text("", false, true));
if (escaped) r.add(new Text("", true));
int i, j = 0;
while ((i = text.indexOf((escaped) ? escapeEnd : escapeBegin, j)) > -1) {
r.add(resolve2Text(text, escaped, (j > 0) ? j + ((escaped) ? startLen : endLen) : 0, i, escapeEnd));
@ -244,7 +244,6 @@ public class knwikiParser implements wikiParser {
if (to == -1) to = text.length();
return new Text(
text.substring(from, to),
escaped,
from < escapeEnd.length() + 2 || (!escaped && text.charAt(from - escapeEnd.length() - 1) == '\n'));
}

@ -599,7 +599,7 @@ public final class HTTPDFileHandler {
env.put("CONTENT_TYPE", requestHeader.getContentType());
}
if (method.equalsIgnoreCase(HeaderFramework.METHOD_POST) && body != null) {
env.put("CONTENT_LENGTH", requestHeader.getContentLength() + "");
env.put("CONTENT_LENGTH", Integer.toString(requestHeader.getContentLength()));
}
// add values from request header to environment (see: http://hoohoo.ncsa.uiuc.edu/cgi/env.html#headers)

@ -138,10 +138,10 @@ public final class HTTPDProxyHandler {
if (pattern == null) pattern = "DATA/LOG/proxyAccess%u%g.log";
final String limitStr = manager.getProperty(className + ".logging.FileHandler.limit");
if (limitStr != null) try { limit = Integer.valueOf(limitStr).intValue(); } catch (final NumberFormatException e) {}
if (limitStr != null) try { limit = Integer.parseInt(limitStr); } catch (final NumberFormatException e) {}
final String countStr = manager.getProperty(className + ".logging.FileHandler.count");
if (countStr != null) try { count = Integer.valueOf(countStr).intValue(); } catch (final NumberFormatException e) {}
if (countStr != null) try { count = Integer.parseInt(countStr); } catch (final NumberFormatException e) {}
// creating the proxy access logger
final Logger proxyLogger = Logger.getLogger("PROXY.access");
@ -168,7 +168,7 @@ public final class HTTPDProxyHandler {
sb = Switchboard.getSwitchboard();
if (sb != null) {
isTransparentProxy = Boolean.valueOf(sb.getConfig("isTransparentProxy","false")).booleanValue();
isTransparentProxy = Boolean.parseBoolean(sb.getConfig("isTransparentProxy","false"));
// set timeout
timeout = Integer.parseInt(sb.getConfig("proxy.clientTimeout", "10000"));

@ -371,7 +371,6 @@ public final class Switchboard extends serverSwitch {
this.useTailCache,
this.exceed134217727);
crawler = new CrawlSwitchboard(
peers,
networkName,
log,
this.queuesRoot);
@ -847,7 +846,6 @@ public final class Switchboard extends serverSwitch {
// startup
crawler = new CrawlSwitchboard(
peers,
networkName,
log,
this.queuesRoot);

@ -59,7 +59,7 @@ public abstract class AbstractFinding<SpecificRole extends Role> implements Find
* set the current priority
* This may only be used internally as part of the engine process to create a result queue
*/
public void setPriority(int newPriority) {
public void setPriority(final int newPriority) {
this.priority = newPriority;
}
@ -71,15 +71,15 @@ public abstract class AbstractFinding<SpecificRole extends Role> implements Find
return this.role;
}
public int compare(Finding<SpecificRole> f1, Finding<SpecificRole> f2) {
int p1 = f1.getPriority();
int p2 = f2.getPriority();
public int compare(final Finding<SpecificRole> f1, final Finding<SpecificRole> f2) {
final int p1 = f1.getPriority();
final int p2 = f2.getPriority();
if (p1 < p2) return 1;
if (p1 > p2) return -1;
return 0;
}
public int compareTo(Finding<SpecificRole> o) {
public int compareTo(final Finding<SpecificRole> o) {
return compare(this, o);
}

@ -5,8 +5,8 @@
// This is a part of YaCy, a peer-to-peer based web search engine
//
// $LastChangedDate: 2006-04-02 22:40:07 +0200 (So, 02 Apr 2006) $
// $LastChangedRevision: 1986 $
// $LastChangedBy: orbiter $
// $LastChangedRevision$
// $LastChangedBy$
//
// LICENSE
//
@ -53,12 +53,10 @@ public class Compressor implements BLOB {
private HashMap<String, byte[]> buffer; // entries which are not yet compressed, format is RAW (without magic)
private long bufferlength;
private long maxbufferlength;
private int cdr;
public Compressor(BLOB backend, long buffersize) {
this.backend = backend;
this.maxbufferlength = buffersize;
this.cdr = 0;
initBuffer();
}
@ -101,7 +99,6 @@ public class Compressor implements BLOB {
private byte[] compressAddMagic(byte[] b) {
// compress a byte array and add a leading magic for the compression
try {
cdr++;
//System.out.print("/(" + cdr + ")"); // DEBUG
final ByteArrayOutputStream baos = new ByteArrayOutputStream(b.length / 5);
baos.write(gzipMagic);
@ -130,7 +127,6 @@ public class Compressor implements BLOB {
if (b == null) return null;
if (ByteArray.startsWith(b, gzipMagic)) {
//System.out.print("\\"); // DEBUG
cdr--;
ByteArrayInputStream bais = new ByteArrayInputStream(b);
// eat up the magic
bais.read();

@ -72,7 +72,7 @@ public final class Cache implements ObjectIndex, Iterable<Row.Entry> {
* @param hitLimit a limit of cache hit entries. If given as value <= 0, then only the RAM limits the size
* @param missLimit a limit of cache miss entries. If given as value <= 0, then only the RAM limits the size
*/
public Cache(final ObjectIndex backupIndex, int hitLimit, int missLimit) {
public Cache(final ObjectIndex backupIndex, final int hitLimit, final int missLimit) {
this.index = backupIndex;
this.hitLimit = hitLimit;
this.missLimit = missLimit;

@ -63,7 +63,7 @@ public final class Column {
// cut quotes etc.
celldef = celldef.trim();
if (celldef.startsWith("<")) celldef = celldef.substring(1);
if (celldef.charAt(0) == '<') celldef = celldef.substring(1);
if (celldef.endsWith(">")) celldef = celldef.substring(0, celldef.length() - 1);
// parse type definition
@ -260,11 +260,11 @@ public final class Column {
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
public boolean equals(final Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (!(obj instanceof Column)) return false;
Column other = (Column) obj;
final Column other = (Column) obj;
if (celltype != other.celltype) return false;
if (cellwidth != other.cellwidth) return false;
if (encoder != other.encoder) return false;

@ -40,7 +40,7 @@ public final class ConcurrentARC<K, V> implements ARC<K, V> {
private final ARC<K, V> arc[];
@SuppressWarnings("unchecked")
public ConcurrentARC(final int cacheSize, int partitions) {
public ConcurrentARC(final int cacheSize, final int partitions) {
this.mask = 1;
while (this.mask < partitions) this.mask = this.mask * 2;
this.arc = new SimpleARC[mask];
@ -53,7 +53,7 @@ public final class ConcurrentARC<K, V> implements ARC<K, V> {
* @param s
* @param v
*/
public final void put(K s, V v) {
public final void put(final K s, final V v) {
this.arc[s.hashCode() & mask].put(s, v);
}
@ -62,7 +62,7 @@ public final class ConcurrentARC<K, V> implements ARC<K, V> {
* @param s
* @return the value
*/
public final V get(K s) {
public final V get(final K s) {
return this.arc[s.hashCode() & mask].get(s);
}
@ -71,7 +71,7 @@ public final class ConcurrentARC<K, V> implements ARC<K, V> {
* @param s
* @return
*/
public final boolean containsKey(K s) {
public final boolean containsKey(final K s) {
return this.arc[s.hashCode() & mask].containsKey(s);
}
@ -80,7 +80,7 @@ public final class ConcurrentARC<K, V> implements ARC<K, V> {
* @param s
* @return the old value
*/
public final V remove(K s) {
public final V remove(final K s) {
return this.arc[s.hashCode() & mask].remove(s);
}

@ -62,12 +62,12 @@ public final class HandleMap implements Iterable<Row.Entry> {
* @param objectOrder
* @param space
*/
public HandleMap(final int keylength, final ByteOrder objectOrder, int idxbytes, final int expectedspace) {
public HandleMap(final int keylength, final ByteOrder objectOrder, final int idxbytes, final int expectedspace) {
this.rowdef = new Row(new Column[]{new Column("key", Column.celltype_binary, Column.encoder_bytes, keylength, "key"), new Column("long c-" + idxbytes + " {b256}")}, objectOrder);
this.index = new ObjectIndexCache(rowdef, expectedspace);
}
public HandleMap(final int keylength, final ByteOrder objectOrder, int idxbytes, final int expectedspace, final int initialspace) throws RowSpaceExceededException {
public HandleMap(final int keylength, final ByteOrder objectOrder, final int idxbytes, final int expectedspace, final int initialspace) throws RowSpaceExceededException {
this.rowdef = new Row(new Column[]{new Column("key", Column.celltype_binary, Column.encoder_bytes, keylength, "key"), new Column("long c-" + idxbytes + " {b256}")}, objectOrder);
this.index = new ObjectIndexCache(rowdef, expectedspace, initialspace);
}
@ -80,12 +80,12 @@ public final class HandleMap implements Iterable<Row.Entry> {
* @throws IOException
* @throws RowSpaceExceededException
*/
public HandleMap(final int keylength, final ByteOrder objectOrder, int idxbytes, final File file, final int expectedspace) throws IOException, RowSpaceExceededException {
public HandleMap(final int keylength, final ByteOrder objectOrder, final int idxbytes, final File file, final int expectedspace) throws IOException, RowSpaceExceededException {
this(keylength, objectOrder, idxbytes, expectedspace, (int) (file.length() / (keylength + idxbytes)));
// read the index dump and fill the index
InputStream is = new BufferedInputStream(new FileInputStream(file), 1024 * 1024);
if (file.getName().endsWith(".gz")) is = new GZIPInputStream(is);
byte[] a = new byte[keylength + idxbytes];
final byte[] a = new byte[keylength + idxbytes];
int c;
Row.Entry entry;
while (true) {
@ -123,7 +123,7 @@ public final class HandleMap implements Iterable<Row.Entry> {
return new int[]{keym, this.rowdef.width(1) - valm};
}
private final int eq(byte[] a, byte[] b) {
private final int eq(final byte[] a, final byte[] b) {
for (int i = 0; i < a.length; i++) {
if (a[i] != b[i]) return i;
}
@ -137,12 +137,12 @@ public final class HandleMap implements Iterable<Row.Entry> {
* @return the number of written entries
* @throws IOException
*/
public final int dump(File file) throws IOException {
public final int dump(final File file) throws IOException {
// we must use an iterator from the combined index, because we need the entries sorted
// otherwise we could just write the byte[] from the in kelondroRowSet which would make
// everything much faster, but this is not an option here.
File tmp = new File(file.getParentFile(), file.getName() + ".prt");
Iterator<Row.Entry> i = this.index.rows(true, null);
final File tmp = new File(file.getParentFile(), file.getName() + ".prt");
final Iterator<Row.Entry> i = this.index.rows(true, null);
OutputStream os = new BufferedOutputStream(new FileOutputStream(tmp), 4 * 1024 * 1024);
if (file.getName().endsWith(".gz")) os = new GZIPOutputStream(os);
int c = 0;
@ -206,7 +206,7 @@ public final class HandleMap implements Iterable<Row.Entry> {
index.addUnique(newentry);
}
public final synchronized long add(final byte[] key, long a) throws RowSpaceExceededException {
public final synchronized long add(final byte[] key, final long a) throws RowSpaceExceededException {
assert key != null;
assert a > 0; // it does not make sense to add 0. If this occurres, it is a performance issue
@ -218,7 +218,7 @@ public final class HandleMap implements Iterable<Row.Entry> {
index.addUnique(newentry);
return 1;
}
long i = indexentry.getColLong(1) + a;
final long i = indexentry.getColLong(1) + a;
indexentry.setCol(1, i);
index.put(indexentry);
return i;
@ -295,9 +295,9 @@ public final class HandleMap implements Iterable<Row.Entry> {
* @param bufferSize
* @return
*/
public final static initDataConsumer asynchronusInitializer(final int keylength, final ByteOrder objectOrder, int idxbytes, final int expectedspace) {
initDataConsumer initializer = new initDataConsumer(new HandleMap(keylength, objectOrder, idxbytes, expectedspace));
ExecutorService service = Executors.newSingleThreadExecutor();
public final static initDataConsumer asynchronusInitializer(final int keylength, final ByteOrder objectOrder, final int idxbytes, final int expectedspace) {
final initDataConsumer initializer = new initDataConsumer(new HandleMap(keylength, objectOrder, idxbytes, expectedspace));
final ExecutorService service = Executors.newSingleThreadExecutor();
initializer.setResult(service.submit(initializer));
service.shutdown();
return initializer;
@ -321,13 +321,13 @@ public final class HandleMap implements Iterable<Row.Entry> {
private Future<HandleMap> result;
private boolean sortAtEnd;
public initDataConsumer(HandleMap map) {
public initDataConsumer(final HandleMap map) {
this.map = map;
cache = new LinkedBlockingQueue<entry>();
sortAtEnd = false;
}
protected final void setResult(Future<HandleMap> result) {
protected final void setResult(final Future<HandleMap> result) {
this.result = result;
}
@ -348,7 +348,7 @@ public final class HandleMap implements Iterable<Row.Entry> {
* to signal the initialization thread that no more entries will be submitted with consumer()
* this method must be called. The process will not terminate if this is not called before.
*/
public final void finish(boolean sortAtEnd) {
public final void finish(final boolean sortAtEnd) {
this.sortAtEnd = sortAtEnd;
try {
cache.put(poisonEntry);

@ -65,8 +65,8 @@ public final class HandleSet implements Iterable<byte[]> {
public HandleSet(final int keylength, final ByteOrder objectOrder, final File file, final int expectedspace) throws IOException, RowSpaceExceededException {
this(keylength, objectOrder, expectedspace, (int) (file.length() / (keylength + 8)));
// read the index dump and fill the index
InputStream is = new BufferedInputStream(new FileInputStream(file), 1024 * 1024);
byte[] a = new byte[keylength];
final InputStream is = new BufferedInputStream(new FileInputStream(file), 1024 * 1024);
final byte[] a = new byte[keylength];
int c;
while (true) {
c = is.read(a);
@ -84,12 +84,12 @@ public final class HandleSet implements Iterable<byte[]> {
* @return the number of written entries
* @throws IOException
*/
public final int dump(File file) throws IOException {
public final int dump(final File file) throws IOException {
// we must use an iterator from the combined index, because we need the entries sorted
// otherwise we could just write the byte[] from the in kelondroRowSet which would make
// everything much faster, but this is not an option here.
Iterator<Row.Entry> i = this.index.rows(true, null);
OutputStream os = new BufferedOutputStream(new FileOutputStream(file), 1024 * 1024);
final Iterator<Row.Entry> i = this.index.rows(true, null);
final OutputStream os = new BufferedOutputStream(new FileOutputStream(file), 1024 * 1024);
int c = 0;
while (i.hasNext()) {
os.write(i.next().bytes());

@ -57,52 +57,52 @@ public class IndexTest {
public static final long mb = 1024 * 1024;
public static void main(String[] args) {
public static void main(final String[] args) {
// pre-generate test data so it will not influence test case time
int count = args.length == 0 ? 1000000 : Integer.parseInt(args[0]);
final int count = args.length == 0 ? 1000000 : Integer.parseInt(args[0]);
byte[][] tests = new byte[count][];
Random r = new Random(0);
final Random r = new Random(0);
for (int i = 0; i < count; i++) tests[i] = randomHash(r);
System.out.println("generated " + count + " test data entries \n");
// start
System.out.println("\nSTANDARD JAVA CLASS MAPS \n");
long t1 = System.currentTimeMillis();
final long t1 = System.currentTimeMillis();
// test tree map
System.out.println("sorted map");
Runtime.getRuntime().gc();
long freeStartTree = MemoryControl.free();
final long freeStartTree = MemoryControl.free();
TreeMap<byte[], Integer> tm = new TreeMap<byte[], Integer>(Base64Order.enhancedCoder);
for (int i = 0; i < count; i++) tm.put(tests[i], 1);
long t2 = System.currentTimeMillis();
final long t2 = System.currentTimeMillis();
System.out.println("time for TreeMap<byte[]> generation: " + (t2 - t1));
int bugs = 0;
for (int i = 0; i < count; i++) if (tm.get(tests[i]) == null) bugs++;
Runtime.getRuntime().gc();
long freeEndTree = MemoryControl.available();
final long freeEndTree = MemoryControl.available();
tm.clear(); tm = null;
long t3 = System.currentTimeMillis();
final long t3 = System.currentTimeMillis();
System.out.println("time for TreeMap<byte[]> test: " + (t3 - t2) + ", " + bugs + " bugs");
System.out.println("memory for TreeMap<byte[]>: " + (freeStartTree - freeEndTree) / mb + " MB\n");
// test hash map
System.out.println("unsorted map");
Runtime.getRuntime().gc();
long freeStartHash = MemoryControl.available();
final long freeStartHash = MemoryControl.available();
HashMap<String, Integer> hm = new HashMap<String, Integer>();
for (int i = 0; i < count; i++) hm.put(new String(tests[i]), 1);
long t4 = System.currentTimeMillis();
final long t4 = System.currentTimeMillis();
System.out.println("time for HashMap<String> generation: " + (t4 - t3));
bugs = 0;
for (int i = 0; i < count; i++) if (hm.get(new String(tests[i])) == null) bugs++;
Runtime.getRuntime().gc();
long freeEndHash = MemoryControl.available();
final long freeEndHash = MemoryControl.available();
hm.clear(); hm = null;
long t5 = System.currentTimeMillis();
final long t5 = System.currentTimeMillis();
System.out.println("time for HashMap<String> test: " + (t5 - t4) + ", " + bugs + " bugs");
System.out.println("memory for HashMap<String>: " + (freeStartHash - freeEndHash) / mb + " MB\n");
@ -111,7 +111,7 @@ public class IndexTest {
// test kelondro index
System.out.println("sorted map");
Runtime.getRuntime().gc();
long freeStartKelondro = MemoryControl.available();
final long freeStartKelondro = MemoryControl.available();
HandleMap ii = null;
try {
ii = new HandleMap(12, Base64Order.enhancedCoder, 4, count, count);
@ -125,33 +125,33 @@ public class IndexTest {
e.printStackTrace();
}
ii.get(randomHash(r)); // trigger sort
long t6 = System.currentTimeMillis();
final long t6 = System.currentTimeMillis();
System.out.println("time for HandleMap<byte[]> generation: " + (t6 - t5));
bugs = 0;
for (int i = 0; i < count; i++) if (ii.get(tests[i]) != 1) bugs++;
Runtime.getRuntime().gc();
long freeEndKelondro = MemoryControl.available();
final long freeEndKelondro = MemoryControl.available();
ii.clear(); ii = null;
long t7 = System.currentTimeMillis();
final long t7 = System.currentTimeMillis();
System.out.println("time for HandleMap<byte[]> test: " + (t7 - t6) + ", " + bugs + " bugs");
System.out.println("memory for HandleMap<byte[]>: " + (freeStartKelondro - freeEndKelondro) / mb + " MB\n");
// test ByteArray
System.out.println("unsorted map");
Runtime.getRuntime().gc();
long freeStartBA = MemoryControl.available();
final long freeStartBA = MemoryControl.available();
HashMap<ByteArray, Integer> bm = new HashMap<ByteArray, Integer>();
for (int i = 0; i < count; i++) bm.put(new ByteArray(tests[i]), 1);
long t8 = System.currentTimeMillis();
final long t8 = System.currentTimeMillis();
System.out.println("time for HashMap<ByteArray> generation: " + (t8 - t7));
bugs = 0;
for (int i = 0; i < count; i++) if (bm.get(new ByteArray(tests[i])) == null) bugs++;
Runtime.getRuntime().gc();
long freeEndBA = MemoryControl.available();
final long freeEndBA = MemoryControl.available();
bm.clear(); bm = null;
long t9 = System.currentTimeMillis();
final long t9 = System.currentTimeMillis();
System.out.println("time for HashMap<ByteArray> test: " + (t9 - t8) + ", " + bugs + " bugs");
System.out.println("memory for HashMap<ByteArray>: " + (freeStartBA - freeEndBA) / mb + " MB\n");

@ -87,19 +87,19 @@ public final class ObjectIndexCache implements ObjectIndex, Iterable<Row.Entry>
}
public final synchronized byte[] smallestKey() {
byte[] b0 = index0.smallestKey();
final byte[] b0 = index0.smallestKey();
if (b0 == null) return null;
if (index1 == null) return b0;
byte[] b1 = index0.smallestKey();
final byte[] b1 = index0.smallestKey();
if (b1 == null || rowdef.objectOrder.compare(b1, b0) > 0) return b0;
return b1;
}
public final synchronized byte[] largestKey() {
byte[] b0 = index0.largestKey();
final byte[] b0 = index0.largestKey();
if (b0 == null) return null;
if (index1 == null) return b0;
byte[] b1 = index0.largestKey();
final byte[] b1 = index0.largestKey();
if (b1 == null || rowdef.objectOrder.compare(b0, b1) > 0) return b0;
return b1;
}
@ -126,7 +126,7 @@ public final class ObjectIndexCache implements ObjectIndex, Iterable<Row.Entry>
finishInitialization();
// if the new entry is within the initialization part, just overwrite it
assert index0.isSorted();
byte[] key = entry.getPrimaryKeyBytes();
final byte[] key = entry.getPrimaryKeyBytes();
if (index0.has(key)) {
// replace the entry
return index0.replace(entry);
@ -141,7 +141,7 @@ public final class ObjectIndexCache implements ObjectIndex, Iterable<Row.Entry>
finishInitialization();
// if the new entry is within the initialization part, just overwrite it
assert index0.isSorted();
byte[] key = entry.getPrimaryKeyBytes();
final byte[] key = entry.getPrimaryKeyBytes();
if (index0.has(key)) {
// replace the entry
index0.put(entry);
@ -167,11 +167,11 @@ public final class ObjectIndexCache implements ObjectIndex, Iterable<Row.Entry>
while (i.hasNext()) addUnique(i.next());
}
public final synchronized long inc(final byte[] key, int col, long add, Row.Entry initrow) throws RowSpaceExceededException {
public final synchronized long inc(final byte[] key, final int col, final long add, final Row.Entry initrow) throws RowSpaceExceededException {
assert (key != null);
finishInitialization();
assert index0.isSorted();
long l = index0.inc(key, col, add, null);
final long l = index0.inc(key, col, add, null);
if (l != Long.MIN_VALUE) return l;
return index1.inc(key, col, add, initrow);
}
@ -182,8 +182,8 @@ public final class ObjectIndexCache implements ObjectIndex, Iterable<Row.Entry>
if (index1 == null) {
return index0.removeDoubles();
}
ArrayList<RowCollection> d0 = index0.removeDoubles();
ArrayList<RowCollection> d1 = index1.removeDoubles();
final ArrayList<RowCollection> d0 = index0.removeDoubles();
final ArrayList<RowCollection> d1 = index1.removeDoubles();
d0.addAll(d1);
return d0;
}
@ -254,8 +254,8 @@ public final class ObjectIndexCache implements ObjectIndex, Iterable<Row.Entry>
// index0 should be sorted
// sort index1 to enable working of the merge iterator
//assert consistencyAnalysis0() : "consistency problem: " + consistencyAnalysis();
CloneableIterator<byte[]> k0 = index0.keys(up, firstKey);
CloneableIterator<byte[]> k1 = index1.keys(up, firstKey);
final CloneableIterator<byte[]> k0 = index0.keys(up, firstKey);
final CloneableIterator<byte[]> k1 = index1.keys(up, firstKey);
if (k0 == null) return k1;
if (k1 == null) return k0;
return new MergeIterator<byte[]>(
@ -284,8 +284,8 @@ public final class ObjectIndexCache implements ObjectIndex, Iterable<Row.Entry>
// sort index1 to enable working of the merge iterator
//index1.sort();
//assert consistencyAnalysis0() : "consistency problem: " + consistencyAnalysis();
CloneableIterator<Row.Entry> k0 = index0.rows(up, firstKey);
CloneableIterator<Row.Entry> k1 = index1.rows(up, firstKey);
final CloneableIterator<Row.Entry> k0 = index0.rows(up, firstKey);
final CloneableIterator<Row.Entry> k1 = index1.rows(up, firstKey);
if (k0 == null) return k1;
if (k1 == null) return k0;
return new MergeIterator<Row.Entry>(

@ -71,7 +71,7 @@ public final class Row {
this.primaryKeyLength = row[0].cellwidth;
}
public Row(String structure, final ByteOrder objectOrder) {
public Row(final String structure, final ByteOrder objectOrder) {
assert (objectOrder != null);
this.objectOrder = objectOrder;
// define row with row syntax
@ -204,7 +204,7 @@ public final class Row {
return a.compareTo(b);
}
public boolean equal(Entry a, Entry b) {
public boolean equal(final Entry a, final Entry b) {
return a.equals(b);
}
@ -332,7 +332,7 @@ public final class Row {
return objectOrder.compare(this.bytes(), 0, this.getPrimaryKeyLength(), o.bytes(), 0, o.getPrimaryKeyLength());
}
public int compare(Entry o1, Entry o2) {
public int compare(final Entry o1, final Entry o2) {
return o1.compareTo(o2);
}
@ -341,7 +341,7 @@ public final class Row {
if (this == obj) return true;
if (obj == null) return false;
if (!(obj instanceof Entry)) return false;
Entry other = (Entry) obj;
final Entry other = (Entry) obj;
final byte[] t = this.bytes();
final byte[] o = other.bytes();
for (int i = 0; i < primaryKeyLength; i++) {
@ -351,8 +351,8 @@ public final class Row {
}
public int hashCode() {
byte[] b = this.getPrimaryKeyBytes();
int len = b.length;
final byte[] b = this.getPrimaryKeyBytes();
final int len = b.length;
int h = 1;
for (int i = 0; i < len; i++) {
h = 31 * h + b[i];
@ -484,10 +484,10 @@ public final class Row {
}
}
public final long incCol(final int column, long c) {
int encoder = row[column].encoder;
int colstrt = colstart[column];
int cellwidth = row[column].cellwidth;
public final long incCol(final int column, final long c) {
final int encoder = row[column].encoder;
final int colstrt = colstart[column];
final int cellwidth = row[column].cellwidth;
long l;
switch (encoder) {
case Column.encoder_b64e:
@ -517,14 +517,14 @@ public final class Row {
final Object[] ref = nickref.get(nickname);
if (ref == null) return dflt;
final Column col = (Column) ref[0];
return getColString(col.encoder, ((Integer) ref[1]).intValue(), col.cellwidth, encoding);
return getColString(((Integer) ref[1]).intValue(), col.cellwidth, encoding);
}
public final String getColString(final int column, final String encoding) {
return getColString(row[column].encoder, colstart[column], row[column].cellwidth, encoding);
return getColString(colstart[column], row[column].cellwidth, encoding);
}
private final String getColString(final int encoder, final int clstrt, int length, final String encoding) {
private final String getColString(final int clstrt, int length, final String encoding) {
if (rowinstance[offset + clstrt] == 0) return null;
if (length > rowinstance.length - offset - clstrt) length = rowinstance.length - offset - clstrt;
while ((length > 0) && (rowinstance[offset + clstrt + length - 1] == 0)) length--;
@ -660,7 +660,7 @@ public final class Row {
}
}
public Queue newQueue(int maxsize) {
public Queue newQueue(final int maxsize) {
return new Queue(maxsize);
}
@ -668,11 +668,11 @@ public final class Row {
private final ArrayBlockingQueue<Entry> queue;
public Queue(int maxsize) {
public Queue(final int maxsize) {
this.queue = new ArrayBlockingQueue<Entry>(maxsize);
}
public void put(Entry e) throws InterruptedException {
public void put(final Entry e) throws InterruptedException {
this.queue.put(e);
}
@ -680,7 +680,7 @@ public final class Row {
return this.queue.take();
}
public Entry get(byte[] key) {
public Entry get(final byte[] key) {
for (Entry e: this.queue) {
if (objectOrder.compare(key, 0, key.length, e.bytes(), 0, e.getPrimaryKeyLength()) == 0) {
return e;
@ -689,8 +689,8 @@ public final class Row {
return null;
}
public Entry delete(byte[] key) {
Iterator<Entry> i = this.queue.iterator();
public Entry delete(final byte[] key) {
final Iterator<Entry> i = this.queue.iterator();
Entry e;
while (i.hasNext()) {
e = i.next();
@ -734,7 +734,7 @@ public final class Row {
if (this == obj) return true;
if (obj == null) return false;
if (!(obj instanceof Row)) return false;
Row other = (Row) obj;
final Row other = (Row) obj;
if (this.objectsize != other.objectsize) return false;
if (this.columns() != other.columns()) return false;
for (int i = 0; i < other.row.length; i++) {

@ -208,7 +208,7 @@ public class RowCollection implements Iterable<Row.Entry> {
return this.rowdef;
}
protected final long neededSpaceForEnsuredSize(final int elements, boolean forcegc) {
protected final long neededSpaceForEnsuredSize(final int elements, final boolean forcegc) {
assert elements > 0 : "elements = " + elements;
final long needed = elements * rowdef.objectsize;
if (chunkcache.length >= needed) return 0;
@ -224,12 +224,12 @@ public class RowCollection implements Iterable<Row.Entry> {
protected final void ensureSize(final int elements) throws RowSpaceExceededException {
if (elements == 0) return;
long allocram = neededSpaceForEnsuredSize(elements, true);
final long allocram = neededSpaceForEnsuredSize(elements, true);
if (allocram == 0) return;
assert allocram > chunkcache.length : "wrong alloc computation: allocram = " + allocram + ", chunkcache.length = " + chunkcache.length;
if (!MemoryControl.request(allocram, true)) throw new RowSpaceExceededException(allocram, "RowCollection grow");
try {
byte[] newChunkcache = new byte[(int) allocram]; // increase space
final byte[] newChunkcache = new byte[(int) allocram]; // increase space
System.arraycopy(chunkcache, 0, newChunkcache, 0, chunkcache.length);
chunkcache = newChunkcache;
} catch (OutOfMemoryError e) {
@ -258,7 +258,7 @@ public class RowCollection implements Iterable<Row.Entry> {
return; // if the swap buffer is not available, we must give up.
// This is not critical. Otherwise we provoke a serious
// problem with OOM
byte[] newChunkcache = new byte[(int) needed];
final byte[] newChunkcache = new byte[(int) needed];
System.arraycopy(chunkcache, 0, newChunkcache, 0, Math.min(
chunkcache.length, newChunkcache.length));
chunkcache = newChunkcache;
@ -299,7 +299,7 @@ public class RowCollection implements Iterable<Row.Entry> {
public synchronized final void set(final int index, final Row.Entry a) throws RowSpaceExceededException {
assert (index >= 0) : "set: access with index " + index + " is below zero";
ensureSize(index + 1);
boolean sameKey = match(a.bytes(), 0, a.cellwidth(0), index);
final boolean sameKey = match(a.bytes(), 0, a.cellwidth(0), index);
//if (sameKey) System.out.print("$");
a.writeToArray(chunkcache, index * rowdef.objectsize);
if (index >= this.chunkcount) this.chunkcount = index + 1;
@ -439,7 +439,7 @@ public class RowCollection implements Iterable<Row.Entry> {
if (chunkcount == 0) return null;
this.sort();
final Row.Entry r = get(0, false);
byte[] b = r.getPrimaryKeyBytes();
final byte[] b = r.getPrimaryKeyBytes();
return b;
}
@ -447,7 +447,7 @@ public class RowCollection implements Iterable<Row.Entry> {
if (chunkcount == 0) return null;
this.sort();
final Row.Entry r = get(chunkcount - 1, false);
byte[] b = r.getPrimaryKeyBytes();
final byte[] b = r.getPrimaryKeyBytes();
return b;
}
@ -471,7 +471,7 @@ public class RowCollection implements Iterable<Row.Entry> {
return this.sortBound;
}
public synchronized Iterator<byte[]> keys(boolean keepOrderWhenRemoving) {
public synchronized Iterator<byte[]> keys(final boolean keepOrderWhenRemoving) {
// iterates byte[] - type entries
return new keyIterator(keepOrderWhenRemoving);
}
@ -487,7 +487,7 @@ public class RowCollection implements Iterable<Row.Entry> {
private int p;
private boolean keepOrderWhenRemoving;
public keyIterator(boolean keepOrderWhenRemoving) {
public keyIterator(final boolean keepOrderWhenRemoving) {
this.p = 0;
this.keepOrderWhenRemoving = keepOrderWhenRemoving;
}
@ -858,7 +858,6 @@ public class RowCollection implements Iterable<Row.Entry> {
final ArrayList<RowCollection> report = new ArrayList<RowCollection>();
if (chunkcount < 2) return report;
int i = chunkcount - 2;
int d = 0;
boolean u = true;
RowCollection collection = new RowCollection(this.rowdef, 2);
try {
@ -866,13 +865,11 @@ public class RowCollection implements Iterable<Row.Entry> {
if (match(i, i + 1)) {
collection.addUnique(get(i + 1, false));
removeRow(i + 1, false);
d++;
if (i + 1 < chunkcount - 1) u = false;
} else if (!collection.isEmpty()) {
// finish collection of double occurrences
collection.addUnique(get(i + 1, false));
removeRow(i + 1, false);
d++;
if (i + 1 < chunkcount - 1) u = false;
collection.trim(false);
report.add(collection);

@ -67,7 +67,7 @@ public class RowSet extends RowCollection implements ObjectIndex, Iterable<Row.E
assert rowdef.objectOrder != null;
}
public final static RowSet importRowSet(byte[] b, final Row rowdef) {
public final static RowSet importRowSet(final byte[] b, final Row rowdef) {
assert b.length >= exportOverheadSize : "b.length = " + b.length;
if (b.length < exportOverheadSize) return new RowSet(rowdef);
final int size = (int) NaturalOrder.decodeLong(b, 0, 4);
@ -105,11 +105,11 @@ public class RowSet extends RowCollection implements ObjectIndex, Iterable<Row.E
if ((this.chunkcount - this.sortBound) > collectionReSortLimit) {
sort();
}
int index = find(entry.bytes(), 0, super.rowdef.primaryKeyLength);
final int index = find(entry.bytes(), 0, super.rowdef.primaryKeyLength);
if (index < 0) {
super.addUnique(entry);
} else {
int sb = this.sortBound; // save the sortBound, because it is not altered (we replace at the same place)
final int sb = this.sortBound; // save the sortBound, because it is not altered (we replace at the same place)
set(index, entry); // this may alter the sortBound, which we will revert in the next step
this.sortBound = sb; // revert a sortBound altering
}
@ -129,19 +129,19 @@ public class RowSet extends RowCollection implements ObjectIndex, Iterable<Row.E
super.addUnique(entry);
} else {
oldentry = get(index, true);
int sb = this.sortBound; // save the sortBound, because it is not altered (we replace at the same place)
final int sb = this.sortBound; // save the sortBound, because it is not altered (we replace at the same place)
set(index, entry); // this may alter the sortBound, which we will revert in the next step
this.sortBound = sb; // revert a sortBound altering
}
return oldentry;
}
public final synchronized long inc(byte[] key, int col, long add, Row.Entry initrow) throws RowSpaceExceededException {
public final synchronized long inc(final byte[] key, final int col, final long add, final Row.Entry initrow) throws RowSpaceExceededException {
final int index = find(key, 0, key.length);
if (index >= 0) {
// the entry existed before
final Row.Entry entry = get(index, false); // no clone necessary
long l = entry.incCol(col, add);
final long l = entry.incCol(col, add);
set(index, entry);
return l;
} else if (initrow != null) {
@ -378,7 +378,7 @@ public class RowSet extends RowCollection implements ObjectIndex, Iterable<Row.E
* @return
* @throws RowSpaceExceededException
*/
public final RowSet merge(RowSet c) throws RowSpaceExceededException {
public final RowSet merge(final RowSet c) throws RowSpaceExceededException {
assert c != null;
/*
if (this.isSorted() && this.size() >= c.size()) {
@ -407,9 +407,9 @@ public class RowSet extends RowCollection implements ObjectIndex, Iterable<Row.E
* @return
* @throws RowSpaceExceededException
*/
protected final static RowSet mergeEnum(RowCollection c0, RowCollection c1) throws RowSpaceExceededException {
protected final static RowSet mergeEnum(final RowCollection c0, final RowCollection c1) throws RowSpaceExceededException {
assert c0.rowdef == c1.rowdef : c0.rowdef.toString() + " != " + c1.rowdef.toString();
RowSet r = new RowSet(c0.rowdef, c0.size() + c1.size());
final RowSet r = new RowSet(c0.rowdef, c0.size() + c1.size());
try {
c0.sort();
} catch (Exception e) {

@ -45,15 +45,15 @@ public final class RowSetArray implements ObjectIndex, Iterable<Row.Entry> {
}
}
private final int indexFor(byte[] key) {
private final int indexFor(final byte[] key) {
return (int) (this.rowdef.objectOrder.cardinal(key) % ((long) array.length));
}
private final int indexFor(Entry row) {
private final int indexFor(final Entry row) {
return (int) (this.rowdef.objectOrder.cardinal(row.bytes(), 0, row.getPrimaryKeyLength()) % ((long) array.length));
}
private final RowSet accessArray(int i) {
private final RowSet accessArray(final int i) {
RowSet r = this.array[i];
if (r == null) synchronized (this.array) {
r = new RowSet(this.rowdef);
@ -62,13 +62,13 @@ public final class RowSetArray implements ObjectIndex, Iterable<Row.Entry> {
return r;
}
public final void addUnique(Entry row) throws RowSpaceExceededException {
int i = indexFor(row);
public final void addUnique(final Entry row) throws RowSpaceExceededException {
final int i = indexFor(row);
if (i < 0) return;
accessArray(i).addUnique(row);
}
public final void addUnique(List<Entry> rows) throws RowSpaceExceededException {
public final void addUnique(final List<Entry> rows) throws RowSpaceExceededException {
for (Entry row: rows) addUnique(row);
}
@ -94,25 +94,25 @@ public final class RowSetArray implements ObjectIndex, Iterable<Row.Entry> {
return null;
}
public final Entry get(byte[] key) {
int i = indexFor(key);
public final Entry get(final byte[] key) {
final int i = indexFor(key);
if (i < 0) return null;
RowSet r = this.array[i];
final RowSet r = this.array[i];
if (r == null) return null;
return r.get(key);
}
public final boolean has(byte[] key) {
int i = indexFor(key);
public final boolean has(final byte[] key) {
final int i = indexFor(key);
if (i < 0) return false;
RowSet r = this.array[i];
final RowSet r = this.array[i];
if (r == null) return false;
return r.has(key);
}
public final CloneableIterator<byte[]> keys(boolean up, byte[] firstKey) {
public final CloneableIterator<byte[]> keys(final boolean up, final byte[] firstKey) {
synchronized (this.array) {
Collection<CloneableIterator<byte[]>> col = new ArrayList<CloneableIterator<byte[]>>();
final Collection<CloneableIterator<byte[]>> col = new ArrayList<CloneableIterator<byte[]>>();
for (int i = 0; i < this.array.length; i++) {
if (this.array[i] != null) {
this.array[i].sort();
@ -123,20 +123,20 @@ public final class RowSetArray implements ObjectIndex, Iterable<Row.Entry> {
}
}
public final void put(Entry row) throws RowSpaceExceededException {
int i = indexFor(row);
public final void put(final Entry row) throws RowSpaceExceededException {
final int i = indexFor(row);
if (i < 0) return;
accessArray(i).put(row);
}
public final Entry remove(byte[] key) {
int i = indexFor(key);
public final Entry remove(final byte[] key) {
final int i = indexFor(key);
if (i < 0) return null;
return accessArray(i).remove(key);
}
public final ArrayList<RowCollection> removeDoubles() throws RowSpaceExceededException {
ArrayList<RowCollection> col = new ArrayList<RowCollection>();
final ArrayList<RowCollection> col = new ArrayList<RowCollection>();
synchronized (this.array) {
for (int i = 0; i < this.array.length; i++) {
if (this.array[i] != null) {
@ -152,7 +152,7 @@ public final class RowSetArray implements ObjectIndex, Iterable<Row.Entry> {
synchronized (this.array) {
for (int i = 0; i < this.array.length; i++) {
if (this.array[i] != null) {
Entry entry = this.array[i].removeOne();
final Entry entry = this.array[i].removeOne();
if (this.array[i].isEmpty()) this.array[i] = null;
return entry;
}
@ -161,8 +161,8 @@ public final class RowSetArray implements ObjectIndex, Iterable<Row.Entry> {
return null;
}
public final Entry replace(Entry row) throws RowSpaceExceededException {
int i = indexFor(row);
public final Entry replace(final Entry row) throws RowSpaceExceededException {
final int i = indexFor(row);
if (i < 0) return null;
return accessArray(i).replace(row);
}
@ -171,9 +171,9 @@ public final class RowSetArray implements ObjectIndex, Iterable<Row.Entry> {
return this.rowdef;
}
public final CloneableIterator<Entry> rows(boolean up, byte[] firstKey) {
public final CloneableIterator<Entry> rows(final boolean up, final byte[] firstKey) {
synchronized (this.array) {
Collection<CloneableIterator<Entry>> col = new ArrayList<CloneableIterator<Entry>>();
final Collection<CloneableIterator<Entry>> col = new ArrayList<CloneableIterator<Entry>>();
for (int i = 0; i < this.array.length; i++) {
if (this.array[i] != null) {
this.array[i].sort();
@ -215,8 +215,8 @@ public final class RowSetArray implements ObjectIndex, Iterable<Row.Entry> {
return this.rows(true, null);
}
public final long inc(byte[] key, int col, long add, Entry initrow) throws RowSpaceExceededException {
int i = indexFor(key);
public final long inc(final byte[] key, final int col, final long add, final Entry initrow) throws RowSpaceExceededException {
final int i = indexFor(key);
if (i < 0) return -1;
return accessArray(i).inc(key, col, add, initrow);
}

@ -37,7 +37,7 @@ public class RowSpaceExceededException extends Exception {
private String forUsage;
private long neededRAM, availableRAM, time;
public RowSpaceExceededException(long neededRAM, String forUsage) {
public RowSpaceExceededException(final long neededRAM, final String forUsage) {
super(Long.toString(neededRAM) + " bytes needed for " + forUsage + ": " + MemoryControl.available() + " free at " + (new Date()).toString());
this.time = System.currentTimeMillis();
this.availableRAM = MemoryControl.available();
@ -45,7 +45,7 @@ public class RowSpaceExceededException extends Exception {
this.forUsage = forUsage;
}
public RowSpaceExceededException(long neededRAM, String forUsage, Throwable t) {
public RowSpaceExceededException(final long neededRAM, final String forUsage, final Throwable t) {
super(Long.toString(neededRAM) + " bytes needed for " + forUsage + ": " + MemoryControl.available() + " free at " + (new Date()).toString(), t);
this.time = System.currentTimeMillis();
this.availableRAM = MemoryControl.available();

@ -48,13 +48,13 @@ public final class SimpleARC<K, V> implements ARC<K, V> {
this.cacheSize = cacheSize / 2;
this.levelA = new LinkedHashMap<K, V>(cacheSize, 0.1f, accessOrder) {
private static final long serialVersionUID = 1L;
@Override protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
@Override protected boolean removeEldestEntry(final Map.Entry<K, V> eldest) {
return size() > SimpleARC.this.cacheSize;
}
};
this.levelB = new LinkedHashMap<K, V>(cacheSize, 0.1f, accessOrder) {
private static final long serialVersionUID = 1L;
@Override protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
@Override protected boolean removeEldestEntry(final Map.Entry<K, V> eldest) {
return size() > SimpleARC.this.cacheSize;
}
};
@ -65,7 +65,7 @@ public final class SimpleARC<K, V> implements ARC<K, V> {
* @param s
* @param v
*/
public final synchronized void put(K s, V v) {
public final synchronized void put(final K s, final V v) {
if (this.levelB.containsKey(s)) {
this.levelB.put(s, v);
assert (this.levelB.size() <= cacheSize); // the cache should shrink automatically
@ -80,7 +80,7 @@ public final class SimpleARC<K, V> implements ARC<K, V> {
* @param s
* @return the value
*/
public final synchronized V get(K s) {
public final synchronized V get(final K s) {
V v = this.levelB.get(s);
if (v != null) return v;
v = this.levelA.remove(s);
@ -97,7 +97,7 @@ public final class SimpleARC<K, V> implements ARC<K, V> {
* @param s
* @return
*/
public final synchronized boolean containsKey(K s) {
public final synchronized boolean containsKey(final K s) {
if (this.levelB.containsKey(s)) return true;
return this.levelA.containsKey(s);
}
@ -107,8 +107,8 @@ public final class SimpleARC<K, V> implements ARC<K, V> {
* @param s
* @return the old value
*/
public final synchronized V remove(K s) {
V r = this.levelB.remove(s);
public final synchronized V remove(final K s) {
final V r = this.levelB.remove(s);
if (r != null) return r;
return this.levelA.remove(s);
}

@ -91,7 +91,7 @@ public class Digest {
public static byte[] decodeHex(final String hex) {
final byte[] result = new byte[hex.length() / 2];
for (int i = 0; i < result.length; i++) {
result[i] = (byte) (16 * Integer.parseInt(hex.charAt(i * 2) + "", 16) + Integer.parseInt(hex.charAt(i * 2 + 1) + "", 16));
result[i] = (byte) (16 * Integer.parseInt(Character.toString(hex.charAt(i * 2)), 16) + Integer.parseInt(Character.toString(hex.charAt(i * 2 + 1)), 16));
}
return result;
}

@ -60,7 +60,7 @@ public abstract class AbstractIndex <ReferenceType extends Reference> implements
// creates a set of indexContainers
// this does not use the cache
final Order<ReferenceContainer<ReferenceType>> containerOrder = new ReferenceContainerOrder<ReferenceType>(factory, this.ordering().clone());
ReferenceContainer<ReferenceType> emptyContainer = ReferenceContainer.emptyContainer(factory, startHash);
final ReferenceContainer<ReferenceType> emptyContainer = ReferenceContainer.emptyContainer(factory, startHash);
containerOrder.rotate(emptyContainer);
final TreeSet<ReferenceContainer<ReferenceType>> containers = new TreeSet<ReferenceContainer<ReferenceType>>(containerOrder);
final Iterator<ReferenceContainer<ReferenceType>> i = references(startHash, rot);
@ -103,7 +103,7 @@ public abstract class AbstractIndex <ReferenceType extends Reference> implements
final HashMap<byte[], ReferenceContainer<ReferenceType>> containers = new HashMap<byte[], ReferenceContainer<ReferenceType>>(wordHashes.size());
byte[] singleHash;
ReferenceContainer<ReferenceType> singleContainer;
Iterator<byte[]> i = wordHashes.iterator();
final Iterator<byte[]> i = wordHashes.iterator();
while (i.hasNext()) {
// get next word hash:
@ -136,7 +136,7 @@ public abstract class AbstractIndex <ReferenceType extends Reference> implements
* @return ReferenceContainer the join result
* @throws RowSpaceExceededException
*/
public ReferenceContainer<ReferenceType> searchJoin(final TreeSet<byte[]> wordHashes, final Set<String> urlselection, int maxDistance) throws RowSpaceExceededException {
public ReferenceContainer<ReferenceType> searchJoin(final TreeSet<byte[]> wordHashes, final Set<String> urlselection, final int maxDistance) throws RowSpaceExceededException {
// first check if there is any entry that has no match;
// this uses only operations in ram
for (byte[] wordHash: wordHashes) {
@ -171,8 +171,8 @@ public abstract class AbstractIndex <ReferenceType extends Reference> implements
final TreeSet<byte[]> queryHashes,
final TreeSet<byte[]> excludeHashes,
final Set<String> urlselection,
ReferenceFactory<ReferenceType> termFactory,
int maxDistance) throws RowSpaceExceededException {
final ReferenceFactory<ReferenceType> termFactory,
final int maxDistance) throws RowSpaceExceededException {
return new TermSearch<ReferenceType>(this, queryHashes, excludeHashes, urlselection, termFactory, maxDistance);
}

@ -555,14 +555,12 @@ public final class FileUtils {
public static ArrayList<String> getListArray(final File listFile){
String line;
final ArrayList<String> list = new ArrayList<String>();
int count = 0;
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(listFile),"UTF-8"));
while((line = br.readLine()) != null){
list.add(line);
count++;
}
br.close();
} catch(final IOException e) {

Loading…
Cancel
Save