diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/ids/integer/AbstractIntegerDBIDFactory.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/database/ids/integer/AbstractIntegerDBIDFactory.java | 74 |
1 files changed, 20 insertions, 54 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/database/ids/integer/AbstractIntegerDBIDFactory.java b/src/de/lmu/ifi/dbs/elki/database/ids/integer/AbstractIntegerDBIDFactory.java index 72ecb9be..2317ac43 100644 --- a/src/de/lmu/ifi/dbs/elki/database/ids/integer/AbstractIntegerDBIDFactory.java +++ b/src/de/lmu/ifi/dbs/elki/database/ids/integer/AbstractIntegerDBIDFactory.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.database.ids.integer; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2013 + Copyright (C) 2014 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -31,17 +31,11 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar; import de.lmu.ifi.dbs.elki.database.ids.DBIDs; import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDPair; import de.lmu.ifi.dbs.elki.database.ids.HashSetModifiableDBIDs; -import de.lmu.ifi.dbs.elki.database.ids.distance.DistanceDBIDPair; -import de.lmu.ifi.dbs.elki.database.ids.distance.DoubleDistanceDBIDPair; -import de.lmu.ifi.dbs.elki.database.ids.distance.DoubleDistanceKNNHeap; -import de.lmu.ifi.dbs.elki.database.ids.distance.DoubleDistanceKNNList; -import de.lmu.ifi.dbs.elki.database.ids.distance.KNNHeap; -import de.lmu.ifi.dbs.elki.database.ids.distance.KNNList; -import de.lmu.ifi.dbs.elki.database.ids.generic.DistanceDBIDPairKNNHeap; -import de.lmu.ifi.dbs.elki.distance.distancevalue.Distance; -import de.lmu.ifi.dbs.elki.distance.distancevalue.DoubleDistance; -import de.lmu.ifi.dbs.elki.persistent.ByteBufferSerializer; -import de.lmu.ifi.dbs.elki.persistent.FixedSizeByteBufferSerializer; +import de.lmu.ifi.dbs.elki.database.ids.KNNHeap; +import de.lmu.ifi.dbs.elki.database.ids.KNNList; +import de.lmu.ifi.dbs.elki.database.ids.ModifiableDoubleDBIDList; +import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer; +import de.lmu.ifi.dbs.elki.utilities.io.FixedSizeByteBufferSerializer; /** * Abstract base class for DBID factories. @@ -89,7 +83,7 @@ abstract class AbstractIntegerDBIDFactory implements DBIDFactory { @Override public String toString(DBIDRef id) { - return Integer.toString(id.internalGetIndex()); + return (id != null) ? Integer.toString(id.internalGetIndex()) : "null"; } @Override @@ -134,60 +128,32 @@ abstract class AbstractIntegerDBIDFactory implements DBIDFactory { @Override public DoubleDBIDPair newPair(double val, DBIDRef id) { - return new IntegerDoubleDBIDPair(val, id.internalGetIndex()); + return new DoubleIntegerDBIDPair(val, id.internalGetIndex()); } - @SuppressWarnings("unchecked") @Override - public <D extends Distance<D>> DistanceDBIDPair<D> newDistancePair(D val, DBIDRef id) { - if(val instanceof DoubleDistance) { - return (DistanceDBIDPair<D>) new DoubleDistanceIntegerDBIDPair(((DoubleDistance) val).doubleValue(), id.internalGetIndex()); - } - return new DistanceIntegerDBIDPair<>(val, id.internalGetIndex()); - } - - @Override - public DoubleDistanceDBIDPair newDistancePair(double val, DBIDRef id) { - return new DoubleDistanceIntegerDBIDPair(val, id.internalGetIndex()); + public KNNHeap newHeap(int k) { + return new DoubleIntegerDBIDKNNHeap(k); } - @SuppressWarnings("unchecked") @Override - public <D extends Distance<D>> KNNHeap<D> newHeap(D factory, int k) { - if(factory instanceof DoubleDistance) { - return (KNNHeap<D>) newDoubleDistanceHeap(k); + public KNNHeap newHeap(KNNList exist) { + KNNHeap heap = newHeap(exist.getK()); + // Insert backwards, as this will produce a proper heap + for(int i = exist.size() - 1; i >= 0; i--) { + heap.insert(exist.get(i)); } - return new DistanceDBIDPairKNNHeap<>(k); + return heap; } - @SuppressWarnings("unchecked") @Override - public <D extends Distance<D>> KNNHeap<D> newHeap(KNNList<D> exist) { - if(exist instanceof DoubleDistanceKNNList) { - DoubleDistanceKNNHeap heap = newDoubleDistanceHeap(exist.getK()); - // Insert backwards, as this will produce a proper heap - for(int i = exist.size() - 1; i >= 0; i--) { - heap.insert((DoubleDistanceDBIDPair) exist.get(i)); - } - return (KNNHeap<D>) heap; - } - else { - DistanceDBIDPairKNNHeap<D> heap = new DistanceDBIDPairKNNHeap<>(exist.getK()); - // Insert backwards, as this will produce a proper heap - for(int i = exist.size() - 1; i >= 0; i--) { - heap.insert(exist.get(i)); - } - return heap; - } + public ModifiableDoubleDBIDList newDistanceDBIDList(int size) { + return new DoubleIntegerDBIDList(size); } @Override - public DoubleDistanceKNNHeap newDoubleDistanceHeap(int k) { - // TODO: benchmark threshold! - if(k > 1000) { - return new DoubleDistanceIntegerDBIDKNNHeap(k); - } - return new DoubleDistanceIntegerDBIDSortedKNNList(k); + public ModifiableDoubleDBIDList newDistanceDBIDList() { + return new DoubleIntegerDBIDList(); } @Override |