summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java73
1 files changed, 21 insertions, 52 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java b/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java
index 2fc4a5bb..8b34583f 100644
--- a/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java
+++ b/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java
@@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.database;
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
@@ -27,12 +27,10 @@ import java.util.BitSet;
import java.util.Collection;
import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation;
-import de.lmu.ifi.dbs.elki.data.type.TypeUtil;
-import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs;
-import de.lmu.ifi.dbs.elki.database.ids.ArrayModifiableDBIDs;
-import de.lmu.ifi.dbs.elki.database.ids.DBID;
+import de.lmu.ifi.dbs.elki.database.ids.ArrayStaticDBIDs;
import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
import de.lmu.ifi.dbs.elki.database.relation.DBIDView;
import de.lmu.ifi.dbs.elki.database.relation.MaterializedRelation;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
@@ -45,7 +43,6 @@ import de.lmu.ifi.dbs.elki.index.IndexFactory;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.statistics.Duration;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.Parameterizable;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectListParameter;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
@@ -63,7 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* @apiviz.uses DatabaseConnection
*/
@Description("Database using an in-memory hashtable and at least providing linear scans.")
-public class StaticArrayDatabase extends AbstractDatabase implements Parameterizable {
+public class StaticArrayDatabase extends AbstractDatabase {
/**
* Our logger
*/
@@ -72,7 +69,7 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
/**
* IDs of this database
*/
- private ArrayDBIDs ids;
+ private ArrayStaticDBIDs ids;
/**
* The DBID representation we use
@@ -123,26 +120,22 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
// Run at most once.
databaseConnection = null;
- // Find DBID column
- int idrepnr = findDBIDColumn(objpackages);
- // Build DBID array
- final int numObjects = objpackages.dataLength();
- if(LOG.isDebugging()) {
- LOG.debugFine("Importing " + numObjects + " instances.");
- }
- if(idrepnr == -1) {
- this.ids = DBIDUtil.generateStaticDBIDRange(numObjects);
- }
- else {
- final ArrayModifiableDBIDs newids = DBIDUtil.newArray(numObjects);
- for(int j = 0; j < numObjects; j++) {
- DBID newid = (DBID) objpackages.data(j, idrepnr);
- newids.add(newid);
+ // Find DBIDs for bundle
+ int numObjects = objpackages.dataLength();
+ {
+ DBIDs bids = objpackages.getDBIDs();
+ if(bids instanceof ArrayStaticDBIDs) {
+ this.ids = (ArrayStaticDBIDs) bids;
+ }
+ else if(bids == null) {
+ this.ids = DBIDUtil.generateStaticDBIDRange(objpackages.dataLength());
+ }
+ else {
+ this.ids = (ArrayStaticDBIDs) DBIDUtil.makeUnmodifiable(bids);
}
- this.ids = newids;
}
- // Replace id representation.
- // TODO: this is an ugly hack
+ // Replace id representation (it would be nicer if we would not need
+ // DBIDView at all)
this.idrep = new DBIDView(this, this.ids);
relations.add(this.idrep);
getHierarchy().add(this, idrep);
@@ -154,10 +147,6 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
for(int j = 0; j < numObjects; j++, newid.advance()) {
// insert object
for(int i = 0; i < targets.length; i++) {
- // DBIDs were handled above.
- if(i == idrepnr) {
- continue;
- }
@SuppressWarnings("unchecked")
final Relation<Object> relation = (Relation<Object>) targets[i];
relation.set(newid, objpackages.data(j, i));
@@ -174,14 +163,10 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
@SuppressWarnings("unchecked")
final Relation<Object> orep = (Relation<Object>) relation;
final Index index = ofact.instantiate(orep);
- Duration duration = LOG.isStatistics() ? LOG.newDuration(index.getClass().getName() + ".construction") : null;
- if(duration != null) {
- duration.begin();
- }
+ Duration duration = LOG.isStatistics() ? LOG.newDuration(index.getClass().getName() + ".construction").begin() : null;
index.initialize();
if(duration != null) {
- duration.end();
- LOG.statistics(duration);
+ LOG.statistics(duration.end());
}
addIndex(index);
}
@@ -204,22 +189,6 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz
}
/**
- * Find an DBID column.
- *
- * @param pack Package to process
- * @return DBID column
- */
- protected int findDBIDColumn(ObjectBundle pack) {
- for(int i = 0; i < pack.metaLength(); i++) {
- SimpleTypeInformation<?> meta = pack.meta(i);
- if(TypeUtil.DBID.isAssignableFromType(meta)) {
- return i;
- }
- }
- return -1;
- }
-
- /**
* Find a mapping from package columns to database columns, eventually adding
* new database columns when needed.
*