diff options
Diffstat (limited to 'elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore')
28 files changed, 217 insertions, 65 deletions
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DBIDDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DBIDDataStore.java index b79be1f4..8d9d08c8 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DBIDDataStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DBIDDataStore.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar; * DBID-valued data store (avoids boxing/unboxing). * * @author Erich Schubert + * @since 0.4.0 */ public interface DBIDDataStore extends DataStore<DBID> { /** @@ -40,7 +41,7 @@ public interface DBIDDataStore extends DataStore<DBID> { */ @Override @Deprecated - public DBID get(DBIDRef id); + DBID get(DBIDRef id); /** * Retrieves an object from the storage. @@ -49,5 +50,5 @@ public interface DBIDDataStore extends DataStore<DBID> { * @param var Variable to update. * @return {@code var} */ - public DBIDVar assignVar(DBIDRef id, DBIDVar var); + DBIDVar assignVar(DBIDRef id, DBIDVar var); } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStore.java index 2c306486..e78fc591 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStore.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.result.Result; * Generic storage interface for objects indexed by {@link DBID}. * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Data type */ @@ -41,5 +42,5 @@ public interface DataStore<T> extends Result { * @param id Database ID. * @return Object or {@code null} */ - public T get(DBIDRef id); + T get(DBIDRef id); }
\ No newline at end of file diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreEvent.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreEvent.java index 294a3a19..79afd440 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreEvent.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreEvent.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs; * {@link DataStoreListener} of the change. * * @author Erich Schubert + * @since 0.4.0 * * @see DataStore * @see DataStoreListener diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreFactory.java index 63a12693..17c3221b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreFactory.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreFactory.java @@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs; * Use {@link #FACTORY} for a static instance. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.stereotype factory,interface * @apiviz.has WritableDataStore oneway - - «create» diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreIDMap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreIDMap.java index 70e0a3f6..c9501dd6 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreIDMap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreIDMap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; * Interface to map DBIDs to integer record ids for use in storage. * * @author Erich Schubert + * @since 0.4.0 */ public interface DataStoreIDMap { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreListener.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreListener.java index 60a1bc16..edf37bf9 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreListener.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreListener.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.database.datastore; * {@link DataStore}. * * @author Elke Achtert + * @since 0.4.0 * * @apiviz.uses DataStoreEvent oneway - - listens * @apiviz.excludeSubtypes diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreUtil.java index 5602e0d7..7976759b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreUtil.java @@ -26,14 +26,16 @@ package de.lmu.ifi.dbs.elki.database.datastore; import java.util.Comparator; import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; +import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; import de.lmu.ifi.dbs.elki.database.ids.DBIDs; /** * Storage utility class. Mostly a shorthand for * {@link DataStoreFactory#FACTORY}. - * + * * @author Erich Schubert - * + * @since 0.4.0 + * * @apiviz.landmark * @apiviz.composedOf de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory */ @@ -41,7 +43,7 @@ public final class DataStoreUtil { /** * Make a new storage, to associate the given ids with an object of class * dataclass. - * + * * @param <T> stored data type * @param ids DBIDs to store data for * @param hints Hints for the storage manager @@ -55,7 +57,7 @@ public final class DataStoreUtil { /** * Make a new storage, to associate the given ids with an object of class * dataclass. - * + * * @param ids DBIDs to store data for * @param hints Hints for the storage manager * @return new data store @@ -67,7 +69,7 @@ public final class DataStoreUtil { /** * Make a new storage, to associate the given ids with an object of class * dataclass. - * + * * @param ids DBIDs to store data for * @param hints Hints for the storage manager * @return new data store @@ -79,7 +81,7 @@ public final class DataStoreUtil { /** * Make a new storage, to associate the given ids with an object of class * dataclass. - * + * * @param ids DBIDs to store data for * @param hints Hints for the storage manager * @param def Default value @@ -92,7 +94,7 @@ public final class DataStoreUtil { /** * Make a new storage, to associate the given ids with an object of class * dataclass. - * + * * @param ids DBIDs to store data for * @param hints Hints for the storage manager * @return new data store @@ -104,7 +106,7 @@ public final class DataStoreUtil { /** * Make a new storage, to associate the given ids with an object of class * dataclass. - * + * * @param ids DBIDs to store data for * @param hints Hints for the storage manager * @param def Default value @@ -117,7 +119,7 @@ public final class DataStoreUtil { /** * Make a new record storage, to associate the given ids with an object of * class dataclass. - * + * * @param ids DBIDs to store data for * @param hints Hints for the storage manager * @param dataclasses classes to store @@ -129,9 +131,9 @@ public final class DataStoreUtil { /** * Sort objects by a double relation - * + * * @author Erich Schubert - * + * * @apiviz.exclude */ public static class AscendingByDoubleDataStore implements Comparator<DBIDRef> { @@ -139,7 +141,7 @@ public final class DataStoreUtil { * Scores to use for sorting. */ private final DoubleDataStore scores; - + /** * Constructor. * @@ -158,9 +160,9 @@ public final class DataStoreUtil { /** * Sort objects by a double relation - * + * * @author Erich Schubert - * + * * @apiviz.exclude */ public static class DescendingByDoubleDataStore implements Comparator<DBIDRef> { @@ -168,7 +170,7 @@ public final class DataStoreUtil { * Scores to use for sorting. */ private final DoubleDataStore scores; - + /** * Constructor. * @@ -184,4 +186,64 @@ public final class DataStoreUtil { return Double.compare(scores.doubleValue(id2), scores.doubleValue(id1)); } } + + /** + * Sort objects by a double relation + * + * @author Erich Schubert + * + * @apiviz.exclude + */ + public static class AscendingByDoubleDataStoreAndId implements Comparator<DBIDRef> { + /** + * Scores to use for sorting. + */ + private final DoubleDataStore scores; + + /** + * Constructor. + * + * @param scores Scores for sorting + */ + public AscendingByDoubleDataStoreAndId(DoubleDataStore scores) { + super(); + this.scores = scores; + } + + @Override + public int compare(DBIDRef id1, DBIDRef id2) { + int c = Double.compare(scores.doubleValue(id1), scores.doubleValue(id2)); + return c != 0 ? c : DBIDUtil.compare(id1, id2); + } + } + + /** + * Sort objects by a double relation + * + * @author Erich Schubert + * + * @apiviz.exclude + */ + public static class DescendingByDoubleDataStoreAndId implements Comparator<DBIDRef> { + /** + * Scores to use for sorting. + */ + private final DoubleDataStore scores; + + /** + * Constructor. + * + * @param scores Scores for sorting + */ + public DescendingByDoubleDataStoreAndId(DoubleDataStore scores) { + super(); + this.scores = scores; + } + + @Override + public int compare(DBIDRef id1, DBIDRef id2) { + int c = Double.compare(scores.doubleValue(id2), scores.doubleValue(id1)); + return c != 0 ? c : DBIDUtil.compare(id1, id2); + } + } } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DoubleDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DoubleDataStore.java index 8cf6cdf1..8f52f996 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DoubleDataStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DoubleDataStore.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; * Double-valued data store (avoids boxing/unboxing). * * @author Erich Schubert + * @since 0.4.0 */ public interface DoubleDataStore extends DataStore<Double> { /** @@ -38,7 +39,7 @@ public interface DoubleDataStore extends DataStore<Double> { */ @Override @Deprecated - public Double get(DBIDRef id); + Double get(DBIDRef id); /** * Retrieves an object from the storage. @@ -46,5 +47,5 @@ public interface DoubleDataStore extends DataStore<Double> { * @param id Database ID. * @return Double value */ - public double doubleValue(DBIDRef id); + double doubleValue(DBIDRef id); }
\ No newline at end of file diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/IntegerDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/IntegerDataStore.java index 986f4fc8..7747bcb3 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/IntegerDataStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/IntegerDataStore.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; * Integer-valued data store (avoids boxing/unboxing). * * @author Erich Schubert + * @since 0.4.0 */ public interface IntegerDataStore extends DataStore<Integer> { /** @@ -38,7 +39,7 @@ public interface IntegerDataStore extends DataStore<Integer> { */ @Override @Deprecated - public Integer get(DBIDRef id); + Integer get(DBIDRef id); /** * Retrieves a value from the storage. @@ -46,5 +47,5 @@ public interface IntegerDataStore extends DataStore<Integer> { * @param id Database ID. * @return Double value */ - public int intValue(DBIDRef id); + int intValue(DBIDRef id); }
\ No newline at end of file diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/RecordStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/RecordStore.java index b98f4d13..be06aa13 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/RecordStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/RecordStore.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.database.datastore; * Represents a storage which stores multiple values per object in a record fashion. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has de.lmu.ifi.dbs.elki.database.datastore.DataStore oneway - - projectsTo */ @@ -40,5 +41,5 @@ public interface RecordStore { * @param datatype data class * @return writable storage */ - public <T> DataStore<T> getStorage(int col, Class<? super T> datatype); + <T> DataStore<T> getStorage(int col, Class<? super T> datatype); } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDBIDDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDBIDDataStore.java index 38fd8adb..df0001ec 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDBIDDataStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDBIDDataStore.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; * Data store specialized for doubles. Avoids boxing/unboxing. * * @author Erich Schubert + * @since 0.4.0 */ public interface WritableDBIDDataStore extends DBIDDataStore, WritableDataStore<DBID> { /** @@ -39,7 +40,7 @@ public interface WritableDBIDDataStore extends DBIDDataStore, WritableDataStore< */ @Override @Deprecated - public DBID put(DBIDRef id, DBID value); + DBID put(DBIDRef id, DBID value); /** * Associates the specified value with the specified id in this storage. If @@ -49,7 +50,7 @@ public interface WritableDBIDDataStore extends DBIDDataStore, WritableDataStore< * @param id Database ID. * @param value Value to store. */ - public void putDBID(DBIDRef id, DBIDRef value); + void putDBID(DBIDRef id, DBIDRef value); /** * Associates the specified value with the specified id in this storage. If @@ -59,5 +60,5 @@ public interface WritableDBIDDataStore extends DBIDDataStore, WritableDataStore< * @param id Database ID. * @param value Value to store. */ - public void put(DBIDRef id, DBIDRef value); + void put(DBIDRef id, DBIDRef value); }
\ No newline at end of file diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDataStore.java index 8baf622e..33f213b8 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDataStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDataStore.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; * Writable data store. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.landmark * @@ -44,13 +45,13 @@ public interface WritableDataStore<T> extends DataStore<T> { * @param value Value to store. * @return previous value */ - public T put(DBIDRef id, T value); + T put(DBIDRef id, T value); /** * Deallocate the storage, freeing the memory and notifies the registered * listeners. */ - public void destroy(); + void destroy(); /** * Delete the contents for a particular ID and notifies the registered @@ -58,5 +59,10 @@ public interface WritableDataStore<T> extends DataStore<T> { * * @param id Database ID. */ - public void delete(DBIDRef id); + void delete(DBIDRef id); + + /** + * Clear the storage (resetting it to the default value). + */ + void clear(); } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDoubleDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDoubleDataStore.java index 8a3f9e8a..ac7fa2f2 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDoubleDataStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDoubleDataStore.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; * Data store specialized for doubles. Avoids boxing/unboxing. * * @author Erich Schubert + * @since 0.4.0 */ public interface WritableDoubleDataStore extends DoubleDataStore, WritableDataStore<Double> { /** @@ -38,7 +39,7 @@ public interface WritableDoubleDataStore extends DoubleDataStore, WritableDataSt */ @Override @Deprecated - public Double put(DBIDRef id, Double value); + Double put(DBIDRef id, Double value); /** * Associates the specified value with the specified id in this storage. If @@ -49,7 +50,7 @@ public interface WritableDoubleDataStore extends DoubleDataStore, WritableDataSt * @param value Value to store. * @return previous value */ - public double putDouble(DBIDRef id, double value); + double putDouble(DBIDRef id, double value); /** * Associates the specified value with the specified id in this storage. If @@ -60,8 +61,7 @@ public interface WritableDoubleDataStore extends DoubleDataStore, WritableDataSt * @param value Value to store. * @return previous value */ - public double put(DBIDRef id, double value); - + double put(DBIDRef id, double value); /** * Increment the specified value with the specified id in this storage. @@ -69,10 +69,5 @@ public interface WritableDoubleDataStore extends DoubleDataStore, WritableDataSt * @param id Database ID. * @param value Value to add to the previous value. */ - public void increment(DBIDRef id, double value); - - /** - * Reinitialize (reset to default value). - */ - public void clear(); + void increment(DBIDRef id, double value); }
\ No newline at end of file diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableIntegerDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableIntegerDataStore.java index 0303f45e..09bbc77f 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableIntegerDataStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableIntegerDataStore.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; * Data store specialized for doubles. Avoids boxing/unboxing. * * @author Erich Schubert + * @since 0.4.0 */ public interface WritableIntegerDataStore extends IntegerDataStore, WritableDataStore<Integer> { /** @@ -38,7 +39,7 @@ public interface WritableIntegerDataStore extends IntegerDataStore, WritableData */ @Override @Deprecated - public Integer put(DBIDRef id, Integer value); + Integer put(DBIDRef id, Integer value); /** * Associates the specified value with the specified id in this storage. If @@ -49,7 +50,7 @@ public interface WritableIntegerDataStore extends IntegerDataStore, WritableData * @param value Value to store. * @return previous value */ - public int putInt(DBIDRef id, int value); + int putInt(DBIDRef id, int value); /** * Associates the specified value with the specified id in this storage. If @@ -60,7 +61,7 @@ public interface WritableIntegerDataStore extends IntegerDataStore, WritableData * @param value Value to store. * @return previous value */ - public int put(DBIDRef id, int value); + int put(DBIDRef id, int value); /** * Increment a value. @@ -68,5 +69,5 @@ public interface WritableIntegerDataStore extends IntegerDataStore, WritableData * @param id Database ID. * @param adjust Value to add to the previous value. */ - public void increment(DBIDRef id, int adjust); + void increment(DBIDRef id, int adjust); }
\ No newline at end of file diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableRecordStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableRecordStore.java index 73106b28..81148c63 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableRecordStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableRecordStore.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; * Represents a storage which stores multiple values per object in a record fashion. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.landmark * @@ -44,7 +45,7 @@ public interface WritableRecordStore extends RecordStore { * @return writable storage */ @Override - public <T> WritableDataStore<T> getStorage(int col, Class<? super T> datatype); + <T> WritableDataStore<T> getStorage(int col, Class<? super T> datatype); /** * Remove an object from the store, all columns. @@ -52,5 +53,5 @@ public interface WritableRecordStore extends RecordStore { * @param id object ID to remove * @return success code */ - public boolean remove(DBIDRef id); + boolean remove(DBIDRef id); } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDBIDStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDBIDStore.java index 2c73ada4..f557f529 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDBIDStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDBIDStore.java @@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar; * A class to answer representation queries using the stored Array. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.composedOf de.lmu.ifi.dbs.elki.database.datastore.DataStoreIDMap */ @@ -60,7 +61,7 @@ public class ArrayDBIDStore implements WritableDBIDDataStore { this.data = DBIDUtil.newArray(size); // Initialize DBIDRef inv = DBIDUtil.invalid(); - for (int i = 0; i < size; i++) { + for(int i = 0; i < size; i++) { data.add(inv); } this.idmap = idmap; @@ -106,8 +107,19 @@ public class ArrayDBIDStore implements WritableDBIDDataStore { } @Override + public void clear() { + // Re-initialize + DBIDRef inv = DBIDUtil.invalid(); + final int size = data.size(); + data.clear(); + for(int i = 0; i < size; i++) { + data.add(inv); + } + } + + @Override public void delete(DBIDRef id) { - throw new UnsupportedOperationException("Can't delete from a static array storage."); + put(id, DBIDUtil.invalid()); } @Override diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDoubleStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDoubleStore.java index d1a8672e..5f6d687d 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDoubleStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDoubleStore.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; * A class to answer representation queries using the stored Array. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.composedOf de.lmu.ifi.dbs.elki.database.datastore.DataStoreIDMap */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayIntegerStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayIntegerStore.java index 6b6ac14a..b4a4d7fc 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayIntegerStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayIntegerStore.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; * A class to answer representation queries using the stored Array. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.composedOf de.lmu.ifi.dbs.elki.database.datastore.DataStoreIDMap */ @@ -48,6 +49,11 @@ public class ArrayIntegerStore implements WritableIntegerDataStore { private DataStoreIDMap idmap; /** + * Default value (for {@link #clear()}). + */ + private int def; + + /** * Constructor. * * @param size Size @@ -67,6 +73,7 @@ public class ArrayIntegerStore implements WritableIntegerDataStore { public ArrayIntegerStore(int size, DataStoreIDMap idmap, int def) { super(); this.data = new int[size]; + this.def = def; if(def != 0) { Arrays.fill(this.data, def); } @@ -123,7 +130,12 @@ public class ArrayIntegerStore implements WritableIntegerDataStore { @Override public void delete(DBIDRef id) { - throw new UnsupportedOperationException("Can't delete from a static array storage."); + put(id, def); + } + + @Override + public void clear() { + Arrays.fill(data, def); } @Override diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayRecordStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayRecordStore.java index 62f07448..deb949ff 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayRecordStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayRecordStore.java @@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; * A class to answer representation queries using the stored Array. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.composedOf DataStoreIDMap * @apiviz.has ArrayRecordStore.StorageAccessor oneway - - projectsTo @@ -128,12 +129,17 @@ public class ArrayRecordStore implements WritableRecordStore { @Override public void destroy() { - throw new UnsupportedOperationException("ArrayStore record columns cannot be destroyed."); + throw new UnsupportedOperationException("ArrayStore record columns cannot (yet) be destroyed."); } @Override public void delete(DBIDRef id) { - throw new UnsupportedOperationException("ArrayStore record values cannot be deleted."); + put(id, null); + } + + @Override + public void clear() { + throw new UnsupportedOperationException("ArrayStore record columns cannot (yet) be cleared."); } @Override diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayStore.java index 35871ed9..bbfa967f 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayStore.java @@ -1,5 +1,7 @@ package de.lmu.ifi.dbs.elki.database.datastore.memory; +import java.util.Arrays; + /* This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures @@ -33,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.ObjectNotFoundException; * A class to answer representation queries using the stored Array. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.composedOf de.lmu.ifi.dbs.elki.database.datastore.DataStoreIDMap * @@ -86,7 +89,12 @@ public class ArrayStore<T> implements WritableDataStore<T> { @Override public void delete(DBIDRef id) { - throw new UnsupportedOperationException("Can't delete from a static array storage."); + put(id, null); + } + + @Override + public void clear() { + Arrays.fill(data, null); } @Override diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDBIDStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDBIDStore.java index 11b3cbb2..9016e6cf 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDBIDStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDBIDStore.java @@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar; * Writable data store for double values. * * @author Erich Schubert + * @since 0.5.0 */ public class MapIntegerDBIDDBIDStore implements WritableDBIDDataStore { /** @@ -76,17 +77,6 @@ public class MapIntegerDBIDDBIDStore implements WritableDBIDDataStore { } @Override - public void destroy() { - map.clear(); - map = null; - } - - @Override - public void delete(DBIDRef id) { - map.remove(DBIDUtil.asInteger(id)); - } - - @Override public void put(DBIDRef id, DBIDRef value) { map.put(DBIDUtil.asInteger(id), DBIDUtil.asInteger(value)); } @@ -102,4 +92,20 @@ public class MapIntegerDBIDDBIDStore implements WritableDBIDDataStore { DBIDFactory.FACTORY.assignVar(var, val); return var; } + + @Override + public void delete(DBIDRef id) { + map.remove(DBIDUtil.asInteger(id)); + } + + @Override + public void destroy() { + map.clear(); + map = null; + } + + @Override + public void clear() { + map.clear(); + } } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDoubleStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDoubleStore.java index 5e21f6b4..4629a942 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDoubleStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDoubleStore.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; * Writable data store for double values. * * @author Erich Schubert + * @since 0.5.0 */ public class MapIntegerDBIDDoubleStore implements WritableDoubleDataStore { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDIntegerStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDIntegerStore.java index 2474aa4a..37fb84c0 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDIntegerStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDIntegerStore.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; * Writable data store for double values. * * @author Erich Schubert + * @since 0.5.0 */ public class MapIntegerDBIDIntegerStore implements WritableIntegerDataStore { /** @@ -112,4 +113,9 @@ public class MapIntegerDBIDIntegerStore implements WritableIntegerDataStore { public void increment(DBIDRef id, int adjust) { map.adjustOrPutValue(DBIDUtil.asInteger(id), adjust, adjust); } + + @Override + public void clear() { + map.clear(); + } } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDRecordStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDRecordStore.java index 66f885d5..6461ad97 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDRecordStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDRecordStore.java @@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; * record. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has MapIntegerDBIDRecordStore.StorageAccessor oneway - - projectsTo */ @@ -165,7 +166,12 @@ public class MapIntegerDBIDRecordStore implements WritableRecordStore { @Override public void delete(DBIDRef id) { - throw new UnsupportedOperationException("Record storage values cannot be deleted."); + throw new UnsupportedOperationException("Record storage accessors cannot be deleted."); + } + + @Override + public void clear() { + throw new UnsupportedOperationException("Record storage accessors cannot be cleared."); } @Override diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDStore.java index 08e31971..2d21dccb 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDStore.java @@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; * wrapper around a regular map. * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Representation object type */ @@ -94,6 +95,11 @@ public class MapIntegerDBIDStore<T> implements WritableDataStore<T> { } @Override + public void clear() { + data.clear(); + } + + @Override public String getLongName() { return "raw"; } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapRecordStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapRecordStore.java index 6ed7f581..e6cf1198 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapRecordStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapRecordStore.java @@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; * record. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has MapRecordStore.StorageAccessor oneway - - projectsTo */ @@ -90,7 +91,7 @@ public class MapRecordStore implements WritableRecordStore { @SuppressWarnings("unchecked") protected <T> T get(DBIDRef id, int index) { Object[] d = data.get(DBIDUtil.deref(id)); - if (d == null) { + if(d == null) { return null; } return (T) d[index]; @@ -108,7 +109,7 @@ public class MapRecordStore implements WritableRecordStore { @SuppressWarnings("unchecked") protected <T> T set(DBIDRef id, int index, T value) { Object[] d = data.get(DBIDUtil.deref(id)); - if (d == null) { + if(d == null) { d = new Object[rlen]; data.put(DBIDUtil.deref(id), d); } @@ -157,6 +158,11 @@ public class MapRecordStore implements WritableRecordStore { } @Override + public void clear() { + throw new UnsupportedOperationException("Record storage accessors cannot (yet) be cleared."); + } + + @Override public void delete(DBIDRef id) { throw new UnsupportedOperationException("Record storage values cannot be deleted."); } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapStore.java index 98e5fc57..758e8bec 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapStore.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapStore.java @@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; * wrapper around a regular map. * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Representation object type */ @@ -87,6 +88,11 @@ public class MapStore<T> implements WritableDataStore<T> { } @Override + public void clear() { + data.clear(); + } + + @Override public String getLongName() { return "raw"; } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MemoryDataStoreFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MemoryDataStoreFactory.java index 649de071..6e9427f5 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MemoryDataStoreFactory.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MemoryDataStoreFactory.java @@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs; * in-memory. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.stereotype factory * @apiviz.has ArrayStore oneway - - «create» |