diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java | 73 |
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. * |