summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/database/ids/integer/AbstractIntegerDBIDFactory.java
diff options
context:
space:
mode:
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.java74
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