diff options
Diffstat (limited to 'elki/src/main/java/de/lmu/ifi/dbs/elki/utilities')
236 files changed, 1042 insertions, 173 deletions
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Alias.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Alias.java index ea5d864d..ba4e385a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Alias.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Alias.java @@ -33,6 +33,7 @@ import java.lang.annotation.Target; * This interface defines alias names for classes. * * @author Erich Schubert + * @since 0.3 */ @Documented @Retention(RetentionPolicy.RUNTIME) diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/BitsUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/BitsUtil.java index 205336df..5869ab4c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/BitsUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/BitsUtil.java @@ -37,6 +37,7 @@ import java.util.Arrays; * <code>I</code> modify in-place. * * @author Erich Schubert + * @since 0.5.0 */ public final class BitsUtil { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ClassGenericsUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ClassGenericsUtil.java index 8c938e02..e746114d 100755 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ClassGenericsUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ClassGenericsUtil.java @@ -61,6 +61,8 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz * developer should use {@link #instantiate} instead. * </p> * + * @author Erich Schubert + * @since 0.2 */ public final class ClassGenericsUtil { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/DatabaseUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/DatabaseUtil.java index a4976b5d..e4f708d9 100755 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/DatabaseUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/DatabaseUtil.java @@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.index.preprocessed.knn.MaterializeKNNPreprocessor; * covariances etc. * * @author Erich Schubert + * @since 0.2 */ public final class DatabaseUtil { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceLoader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceLoader.java index dd3a9ba6..bdddac1d 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceLoader.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceLoader.java @@ -29,7 +29,6 @@ import java.net.URL; import java.util.Enumeration; import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException; -import de.lmu.ifi.dbs.elki.utilities.io.BufferedLineReader; /** * Class that emulates the behavior of an java ServiceLoader, except that the @@ -37,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.BufferedLineReader; * also we need to do the instantiations our way with the parameterizable API. * * @author Erich Schubert + * @since 0.5.0 */ public class ELKIServiceLoader { /** @@ -79,11 +79,35 @@ public class ELKIServiceLoader { Enumeration<URL> configfiles = cl.getResources(fullName); while(configfiles.hasMoreElements()) { URL nextElement = configfiles.nextElement(); + char[] buf = new char[0x4000]; try ( - InputStreamReader is = new InputStreamReader(nextElement.openStream(), "utf-8"); - BufferedLineReader r = new BufferedLineReader(is)) { - while(r.nextLine()) { - parseLine(parent, r.getBuffer(), nextElement); + InputStreamReader is = new InputStreamReader(nextElement.openStream(), "UTF-8");) { + int start = 0, cur = 0, valid = is.read(buf, 0, buf.length); + char c; + while(cur < valid) { + // Find newline or end + while(cur < valid && (c = buf[cur]) != '\n' && c != '\r') { + cur++; + } + if(cur == valid && is.ready()) { + // Move consumed buffer contents: + if(start > 0) { + System.arraycopy(buf, start, buf, 0, valid - start); + valid -= start; + cur -= start; + start = 0; + } + else if(valid == buf.length) { + throw new IOException("Buffer size exceeded. Maximum line length in service files is: " + buf.length + " in file: " + fullName); + } + valid = is.read(buf, valid, buf.length - valid); + continue; + } + parseLine(parent, buf, start, cur, nextElement); + while(cur < valid && ((c = buf[cur]) == '\n' || c == '\r')) { + cur++; + } + start = cur; } } catch(IOException x) { @@ -103,38 +127,33 @@ public class ELKIServiceLoader { * @param line Line to read * @param nam File name for error reporting */ - private static void parseLine(Class<?> parent, CharSequence line, URL nam) { - if(line == null) { - return; - } - int begin = 0, end = line.length(); - while(begin < end && line.charAt(begin) == ' ') { + private static void parseLine(Class<?> parent, char[] line, int begin, int end, URL nam) { + while(begin < end && line[begin] == ' ') { begin++; } - if(begin >= end || line.charAt(begin) == '#') { + if(begin >= end || line[begin] == '#') { return; // Empty/comment lines are okay, continue } - assert(begin == 0 || line.charAt(begin - 1) == ' '); // Find end of class name: int cend = begin + 1; - while(cend < end && line.charAt(cend) != ' ') { + while(cend < end && line[cend] != ' ') { cend++; } // Class name: - String cname = line.subSequence(begin, cend).toString(); + String cname = new String(line, begin, cend - begin); ELKIServiceRegistry.register(parent, cname); for(int abegin = cend + 1, aend = -1; abegin < end; abegin = aend + 1) { // Skip whitespace: - while(abegin < end && line.charAt(abegin) == ' ') { + while(abegin < end && line[abegin] == ' ') { abegin++; } // Find next whitespace: aend = abegin + 1; - while(aend < end && line.charAt(aend) != ' ') { + while(aend < end && line[aend] != ' ') { aend++; } if(abegin < aend) { - ELKIServiceRegistry.registerAlias(parent, line.subSequence(abegin, aend).toString(), cname); + ELKIServiceRegistry.registerAlias(parent, new String(line, abegin, aend - abegin), cname); } } return; diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceRegistry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceRegistry.java index 512de9d1..841dd41a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceRegistry.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceRegistry.java @@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging; * Registry of available implementations in ELKI. * * @author Erich Schubert + * @since 0.7.0 */ public class ELKIServiceRegistry { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceScanner.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceScanner.java index 1bd139c4..05083a60 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceScanner.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceScanner.java @@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging; * A collection of inspection-related utility functions. * * @author Erich Schubert + * @since 0.7.0 */ public class ELKIServiceScanner { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FileUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FileUtil.java index 5ad6d392..17a0e2c2 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FileUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FileUtil.java @@ -35,6 +35,7 @@ import java.util.zip.GZIPInputStream; * Various static helper methods to deal with files and file names. * * @author Erich Schubert + * @since 0.2 */ public final class FileUtil { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FormatUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FormatUtil.java index ad385bcb..dc634eb2 100755 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FormatUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FormatUtil.java @@ -38,6 +38,10 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector; /** * Utility methods for output formatting of various number objects + * + * @author Arthur Zimek + * @author Erich Schubert + * @since 0.2 */ public final class FormatUtil { /** @@ -321,22 +325,33 @@ public final class FormatUtil { /** * Formats the int array a for printing purposes. * + * @param buf The buffer to serialize to * @param a the int array to be formatted - * @param sep the separator between the single values of the float array, e.g. - * ',' - * @return a String representing the int array a + * @param sep the separator between the single values of the array, e.g. ',' + * @return The output buffer {@code buf} */ - public static String format(int[] a, String sep) { + public static StringBuilder formatTo(StringBuilder buf, int[] a, String sep) { if(a.length == 0) { - return ""; + return buf; } - StringBuilder buffer = new StringBuilder(); - buffer.append(a[0]); + buf.append(a[0]); for(int i = 1; i < a.length; i++) { - buffer.append(sep); - buffer.append(a[i]); + buf.append(sep); + buf.append(a[i]); } - return buffer.toString(); + return buf; + } + + /** + * Formats the int array a for printing purposes. + * + * @param a the int array to be formatted + * @param sep the separator between the single values of the array, e.g. ',' + * @return a String representing the int array a + */ + public static String format(int[] a, String sep) { + return (a == null) ? "null" : (a.length == 0) ? "" : // + formatTo(new StringBuilder(), a, sep).toString(); } /** @@ -1302,8 +1317,8 @@ public final class FormatUtil { * Infinity pattern, with any capitalization */ private static final char[] INFINITY_PATTERN = { // - 'I', 'n', 'f', 'i', 'n', 'i', 't', 'y', // - 'i', 'N', 'F', 'I', 'N', 'I', 'T', 'Y' }; + 'I', 'n', 'f', 'i', 'n', 'i', 't', 'y', // + 'i', 'N', 'F', 'I', 'N', 'I', 'T', 'Y' }; /** Length of pattern */ private static final int INFINITY_LENGTH = INFINITY_PATTERN.length >> 1; diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/HandlerList.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/HandlerList.java index e85d9bbd..f82ba9f3 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/HandlerList.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/HandlerList.java @@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair; * query object can be cast to the handlers restriction class. * * @author Erich Schubert + * @since 0.2 * * @param <H> Parent class/interface for all handlers */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Util.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Util.java index 5ed07ec3..24a94ec3 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Util.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Util.java @@ -33,6 +33,10 @@ import java.util.Random; * classes. * * @see de.lmu.ifi.dbs.elki.utilities + * + * @author Arthur Zimek + * @author Erich Schubert + * @since 0.2 */ public final class Util { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java index 070876ca..1d852688 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java @@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.database.ids.ModifiableDoubleDBIDList; * Charles Antony Richard Hoare * * @author Erich Schubert + * @since 0.5.0 * * @apiviz.uses ArrayModifiableDBIDs * @apiviz.uses List diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java index 5a2a1056..fd8624de 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Adapter for array-like things. For example, arrays and lists. * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Item type * @param <A> Array object type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java index a6881e43..640d5c70 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBID; * Use a DBID array in a generic array-like context. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.uses ArrayDBIDs */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java index dc4f3b1c..386243f6 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java @@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector; * reorganizing the objects into a real array. * * @author Erich Schubert + * @since 0.5.0 * * @apiviz.landmark * @apiviz.composedOf ArrayAdapter diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArray.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArray.java index 2f827bb3..ca225b41 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArray.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArray.java @@ -27,12 +27,28 @@ import java.util.Arrays; /** * Array of double values. * - * TODO: add remove, sort etc. - * * @author Erich Schubert + * @since 0.7.0 */ public class DoubleArray implements NumberArrayAdapter<Double, DoubleArray> { /** + * Maximum array size permitted by Java. + * + * This is JVM dependent, but 2^31 - 5 is the usual OpenJDK8 value. + */ + private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 5; + + /** + * Last value where we can grow by 50%. + */ + private static final int LAST_GROW_SIZE = 0x5555_5551; + + // Assert that these values match. + static { + assert (LAST_GROW_SIZE + (LAST_GROW_SIZE >>> 1) + 1 <= MAX_ARRAY_SIZE); + } + + /** * (Reused) store for numerical attributes. */ public double[] data; @@ -55,6 +71,12 @@ public class DoubleArray implements NumberArrayAdapter<Double, DoubleArray> { * @param initialsize Initial size. */ public DoubleArray(int initialsize) { + if(initialsize < 0) { + initialsize = 11; + } + else if(initialsize > MAX_ARRAY_SIZE) { + initialsize = MAX_ARRAY_SIZE; + } this.data = new double[initialsize]; this.size = 0; } @@ -80,18 +102,31 @@ public class DoubleArray implements NumberArrayAdapter<Double, DoubleArray> { } /** - * Add a numeric attribute value. + * Append a value. * * @param attribute Attribute value. */ public void add(double attribute) { if(data.length == size) { - data = Arrays.copyOf(data, size << 1); + grow(); } data[size++] = attribute; } /** + * Grow the current array. + * + * @throws OutOfMemoryError + */ + private void grow() throws OutOfMemoryError { + if(data.length == MAX_ARRAY_SIZE) { + throw new OutOfMemoryError("Array size has reached the Java maximum."); + } + final int newsize = (size >= LAST_GROW_SIZE) ? MAX_ARRAY_SIZE : (size + (size >> 1) + 1); + data = Arrays.copyOf(data, newsize); + } + + /** * Get the value at this position. * * @param pos Position @@ -144,8 +179,12 @@ public class DoubleArray implements NumberArrayAdapter<Double, DoubleArray> { */ public void insert(int pos, double val) { if(size == data.length) { - double[] oldd = data; - data = new double[size << 1]; + if(data.length == MAX_ARRAY_SIZE) { + throw new OutOfMemoryError("Array size has reached the Java maximum."); + } + final int newsize = (size >= LAST_GROW_SIZE) ? MAX_ARRAY_SIZE : (size + (size >> 1) + 1); + final double[] oldd = data; + data = new double[newsize]; System.arraycopy(oldd, 0, data, 0, pos); System.arraycopy(oldd, pos, data, pos + 1, size - pos); } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java index 719aea8a..221335e9 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Use a double array as, well, double array in the ArrayAdapter API. * * @author Erich Schubert + * @since 0.5.0 * * @apiviz.exclude */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java index 4dfd1ecb..047e5f06 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Class to extend an array with a single element virtually. * * @author Erich Schubert + * @since 0.5.0 * * @param <T> Object type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java index 59df30ad..338358f1 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.data.FeatureVector; * Use the static instance from {@link ArrayLikeUtil}! * * @author Erich Schubert + * @since 0.4.0 * * @param <F> Feature type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java index 487f2d84..1c33872d 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix; * Use a matrix as array, by flattening it into a sequence. * * @author Erich Schubert + * @since 0.5.0 * * @apiviz.exclude */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java index fd82178a..6f4bfa78 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Use a double array as, well, double array in the ArrayAdapter API. * * @author Erich Schubert + * @since 0.5.0 * * @apiviz.exclude */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java index 3766492d..d81d68f3 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java @@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Use the static instance from {@link ArrayLikeUtil}! * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Item type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IntegerArray.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IntegerArray.java new file mode 100644 index 00000000..15393114 --- /dev/null +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IntegerArray.java @@ -0,0 +1,264 @@ +package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; +/* + This file is part of ELKI: + Environment for Developing KDD-Applications Supported by Index-Structures + + Copyright (C) 2015 + Ludwig-Maximilians-Universität München + Lehr- und Forschungseinheit für Datenbanksysteme + ELKI Development Team + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +import java.util.Arrays; + +/** + * Array of int values. + * + * @author Erich Schubert + * @since 0.7.0 + */ +public class IntegerArray implements NumberArrayAdapter<Integer, IntegerArray> { + /** + * Maximum array size permitted by Java. + * + * This is JVM dependent, but 2^31 - 5 is the usual OpenJDK8 value. + */ + private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 5; + + /** + * Last value where we can grow by 50%. + */ + private static final int LAST_GROW_SIZE = 0x5555_5551; + + // Assert that these values match. + static { + assert (LAST_GROW_SIZE + (LAST_GROW_SIZE >>> 1) + 1 <= MAX_ARRAY_SIZE); + } + + /** + * (Reused) store for numerical attributes. + */ + public int[] data; + + /** + * Number of numerical attributes. + */ + public int size; + + /** + * Constructor. + */ + public IntegerArray() { + this(11); + } + + /** + * Constructor. + * + * @param initialsize Initial size. + */ + public IntegerArray(int initialsize) { + if(initialsize < 0) { + initialsize = 11; + } + else if(initialsize > MAX_ARRAY_SIZE) { + initialsize = MAX_ARRAY_SIZE; + } + this.data = new int[initialsize]; + this.size = 0; + } + + /** + * Constructor from an existing array. + * + * The new array will be allocated as small as possible, so modifications will + * cause a resize! + * + * @param existing Existing array + */ + public IntegerArray(IntegerArray existing) { + this.data = Arrays.copyOf(existing.data, existing.size); + this.size = existing.size; + } + + /** + * Reset the numeric attribute counter. + */ + public void clear() { + size = 0; + } + + /** + * Append a value. + * + * @param attribute Attribute value. + */ + public void add(int attribute) { + if(data.length == size) { + grow(); + } + data[size++] = attribute; + } + + /** + * Grow the current array. + * + * @throws OutOfMemoryError + */ + private void grow() throws OutOfMemoryError { + if(data.length == MAX_ARRAY_SIZE) { + throw new OutOfMemoryError("Array size has reached the Java maximum."); + } + final int newsize = (size >= LAST_GROW_SIZE) ? MAX_ARRAY_SIZE : (size + (size >> 1) + 1); + data = Arrays.copyOf(data, newsize); + } + + /** + * Get the value at this position. + * + * @param pos Position + * @return Value + */ + public int get(int pos) { + if(pos < 0 || pos >= size) { + throw new ArrayIndexOutOfBoundsException(pos); + } + return data[pos]; + } + + /** + * Set the value at this position. + * + * @param pos Position + * @param value Value + */ + public void set(int pos, int value) { + if(pos < 0 || pos > size) { + throw new ArrayIndexOutOfBoundsException(pos); + } + if(pos == size) { + add(value); + return; + } + data[pos] = value; + } + + /** + * Remove a range from the array. + * + * @param start Start + * @param len Length + */ + public void remove(int start, int len) { + final int end = start + len; + if(end > size) { + throw new ArrayIndexOutOfBoundsException(size); + } + System.arraycopy(data, end, data, start, size - end); + size -= len; + } + + /** + * Insert a value at the given position. + * + * @param pos Insert position + * @param val Value to insert + */ + public void insert(int pos, int val) { + if(size == data.length) { + if(data.length == MAX_ARRAY_SIZE) { + throw new OutOfMemoryError("Array size has reached the Java maximum."); + } + final int newsize = (size >= LAST_GROW_SIZE) ? MAX_ARRAY_SIZE : (size + (size >> 1) + 1); + final int[] oldd = data; + data = new int[newsize]; + System.arraycopy(oldd, 0, data, 0, pos); + System.arraycopy(oldd, pos, data, pos + 1, size - pos); + } + else { + System.arraycopy(data, pos, data, pos + 1, size - pos); + } + data[pos] = val; + size++; + } + + /** + * Get the size of the array. + * + * @return Size + */ + public int size() { + return size; + } + + /** + * Sort the contents. + */ + public void sort() { + Arrays.sort(data, 0, size); + } + + // NumberArrayAdapter: + + @Override + public int size(IntegerArray array) { + return array.size; + } + + @Override + public Integer get(IntegerArray array, int off) throws IndexOutOfBoundsException { + return array.data[off]; + } + + @Override + public double getDouble(IntegerArray array, int off) throws IndexOutOfBoundsException { + return (double) array.data[off]; + } + + @Override + public float getFloat(IntegerArray array, int off) throws IndexOutOfBoundsException { + return (float) array.data[off]; + } + + @Override + public int getInteger(IntegerArray array, int off) throws IndexOutOfBoundsException { + return array.data[off]; + } + + @Override + public short getShort(IntegerArray array, int off) throws IndexOutOfBoundsException { + return (short) array.data[off]; + } + + @Override + public long getLong(IntegerArray array, int off) throws IndexOutOfBoundsException { + return (long) array.data[off]; + } + + @Override + public byte getByte(IntegerArray array, int off) throws IndexOutOfBoundsException { + return (byte) array.data[off]; + } + + /** + * Return a copy of the contents as array. + * + * @return Copy of the contents. + */ + public int[] toArray() { + return Arrays.copyOf(data, size); + } +}
\ No newline at end of file diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java index 242caa48..7e92978a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java @@ -30,6 +30,7 @@ import java.util.List; * Use the static instance from {@link ArrayLikeUtil}! * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Data object type. */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java index 532862cc..c0777fbd 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Adapter for arrays of numbers, to avoid boxing. * * @author Erich Schubert + * @since 0.5.0 * * @param <N> Number type * @param <A> Array type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java index e712ac9a..4c0fec71 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java @@ -32,6 +32,7 @@ import java.util.List; * Use the static instance from {@link ArrayLikeUtil}! * * @author Erich Schubert + * @since 0.5.0 * * @param <T> Data object type. */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java index 8192f3b8..bb66c33e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.data.NumberVector; * Use the static instance from {@link ArrayLikeUtil}! * * @author Erich Schubert + * @since 0.5.0 */ public class NumberVectorAdapter implements NumberArrayAdapter<Number, NumberVector> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java index 3d8e8c3e..cd905948 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Single-item subset adapter * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Entry type * @param <A> Array type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java index 077a0e8d..1299d178 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Subset array adapter (allows reordering and projection). * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Entry type * @param <A> Array type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java index 8a1a064b..7d1d1890 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike; * Subset array adapter (allows reordering and projection) * * @author Erich Schubert + * @since 0.4.0 * * @param <T> Entry type * @param <A> Array type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java index 26da061a..48705ece 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector; * Use the static instance from {@link ArrayLikeUtil}! * * @author Erich Schubert + * @since 0.5.0 */ public class VectorAdapter implements NumberArrayAdapter<Double, Vector> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java index a48a175b..47bc1281 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arrays; * best of 5 heuristic. * * @author Erich Schubert + * @since 0.5.5 */ public class DoubleIntegerArrayQuickSort { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java index ece63ea6..c1b64097 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java @@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * objects. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.uses IntegerComparator */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java index 11f79e45..2cb8e755 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arrays; * Interface for comparing two Integer. * * @author Erich Schubert + * @since 0.4.0 */ public interface IntegerComparator { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java index 5e991156..294d7220 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java @@ -33,6 +33,7 @@ import java.util.Arrays; * allows retrieving existing values. * * @author Erich Schubert + * @since 0.7.0 * * @param <E> */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java index 968251d6..54f6821b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has UnsortedIter * @param <K> Key type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java index 8cd4ef0a..4a1cc8a9 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has UnsortedIter * @param <K> Key type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java index f3cc6d56..78c00bc5 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has UnsortedIter * @param <K> Key type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java index 12a15d46..466c3e7b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has UnsortedIter * @param <K> Key type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java index ba853032..76927fc3 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap for double values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java index 2adc17fd..96ca70c2 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap interface, for double keys and int values. * * @author Erich Schubert + * @since 0.6.0 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java index b0e62c30..ae40da63 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java index d94b63c1..bfc21240 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java index 551c4131..f4011bcd 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap interface, for double keys and long values. * * @author Erich Schubert + * @since 0.6.0 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java index b0f0af50..88a7ee7c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java index fcc3526d..7fc2a5dd 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java index d1a6ed0f..92a1ba9c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java index f4c53260..3c8eda0b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java index 77a380bf..a822cb64 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap interface, for double keys and V values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter * @param <V> Value type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java index 96b03a67..6e8e5c02 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.6.0 * * @apiviz.has UnsortedIter * @param <V> Value type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java index c04fb7cb..b87e6281 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.6.0 * * @apiviz.has UnsortedIter * @param <V> Value type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java index 342c064d..cd8ef1cb 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java @@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; * the priority. * * @author Erich Schubert + * @since 0.4.0 * * @param <O> Stored object type. */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java index 5f6b27c2..fe8aaa53 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java @@ -36,6 +36,7 @@ import java.util.Comparator; * O(n log n). This is implemented via a simple validTo counter. * * @author Erich Schubert + * @since 0.4.0 * * @param <E> Element type. Should be {@link java.lang.Comparable} or a * {@link java.util.Comparator} needs to be given. diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java index c7e897d8..4a1a7ca7 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap for int values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java index a4e54147..54af796b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java index 0e56e2e1..17ece116 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has UnsortedIter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java index defacf83..08eecf02 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap interface, for int keys and V values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter * @param <V> Value type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java index ce3d7809..7f62c277 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.6.0 * * @apiviz.has UnsortedIter * @param <V> Value type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java index c087d7d2..b46dadaa 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil; * Binary heap for primitive types. * * @author Erich Schubert + * @since 0.6.0 * * @apiviz.has UnsortedIter * @param <V> Value type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java index c809e113..4e7c21c2 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java @@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap; * the priority. * * @author Erich Schubert + * @since 0.4.0 * * @param <O> Stored object type. */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java index 8b00dbbe..20ee0547 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * Basic in-memory heap for K values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has UnsortedIter * @param <K> Key type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java index f9628f1a..ea1a356a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java @@ -33,6 +33,7 @@ import java.util.List; * elements. * * @author Erich Schubert + * @since 0.4.0 * * @param <E> Object type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java index 88036e00..83261ef5 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java @@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException; * elements. * * @author Erich Schubert + * @since 0.4.0 * * @param <E> Object type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java index 9fd95a1b..b884c58a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java @@ -30,6 +30,7 @@ import java.util.Comparator; * {@code k} Elements only. * * @author Erich Schubert + * @since 0.4.0 * * @param <E> Element type. Should be {@link Comparable} or a {@link Comparator} * needs to be given. diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java index 80b5768a..ff0dd369 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java @@ -30,6 +30,7 @@ import java.util.Comparator; * {@code k} Elements only. * * @author Erich Schubert + * @since 0.4.0 * * @param <E> Element type. Should be {@link Comparable} or a {@link Comparator} * needs to be given. diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java index be089725..4af70021 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java @@ -32,6 +32,7 @@ import java.util.Comparator; * A heap as used in OPTICS that allows updating entries. * * @author Erich Schubert + * @since 0.4.0 * * @param <O> object type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/FilteredIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/FilteredIter.java index 67876387..aac710e8 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/FilteredIter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/FilteredIter.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy; * Filtered iterator. * * @author Erich Schubert + * @since 0.7.0 * * @apiviz.composedOf Hierarchy.Iter * diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java index 59ec00f0..2f478866 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java @@ -29,6 +29,7 @@ import java.util.HashMap; * Centralized hierarchy implementation, using a HashMap of Lists. * * @author Erich Schubert + * @since 0.6.0 * * @param <O> Object type (arbitrary!) */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java index 6c932451..04d1cd5b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java @@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy; * object, i.e. {@code hierarchy.iterChildren(object);}. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has Iter * diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java index 3496e41c..4b3af7c2 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy; * Modifiable Hierarchy. * * @author Erich Schubert + * @since 0.4.0 * * @param <O> Object type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/StackedIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/StackedIter.java index 52ecc0e3..93aa71b7 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/StackedIter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/StackedIter.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy; * Filtered iterator. * * @author Erich Schubert + * @since 0.7.0 * * @apiviz.composedOf Hierarchy * @apiviz.composedOf Hierarchy.Iter diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java index 9c2f3a60..d07e078b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil; * into the histogram. * * @author Erich Schubert + * @since 0.5.5 * * @param <T> Data type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java index 709f7ceb..743bb179 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java @@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * left and right. * * @author Erich Schubert + * @since 0.5.5 * * @param <T> Data type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java index b0728ddb..a1a81174 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java @@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * adapted for multiple use cases. * * @author Erich Schubert + * @since 0.5.5 */ public abstract class AbstractStaticHistogram implements Histogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java index 7ea5b623..4e0081d5 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java @@ -29,6 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. * primitive in Java. * * @author Erich Schubert + * @since 0.5.5 */ public final class DoubleArrayStaticHistogram extends AbstractObjStaticHistogram<double[]> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java index 2f2e6a02..88a70ad9 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil; * bins to the data fed into the histogram. * * @author Erich Schubert + * @since 0.5.5 */ public class DoubleDynamicHistogram extends DoubleStaticHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java index 9a26c264..84f06713 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * Histogram storing double values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java index 63ba3e21..6d4dc22b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java @@ -32,6 +32,7 @@ import java.util.Arrays; * left and right. * * @author Erich Schubert + * @since 0.5.5 */ public class DoubleStaticHistogram extends AbstractStaticHistogram implements DoubleHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java index 261c7a7f..007ef6e6 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil; * bins to the data fed into the histogram. * * @author Erich Schubert + * @since 0.5.5 */ public class FloatDynamicHistogram extends FloatStaticHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java index 81edb88c..18e992b8 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * Histogram storing float values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java index 6e4d78f5..079e8e0e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java @@ -32,6 +32,7 @@ import java.util.Arrays; * left and right. * * @author Erich Schubert + * @since 0.5.5 */ public class FloatStaticHistogram extends AbstractStaticHistogram implements FloatHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java index a8fd60c0..1632fc45 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.ArrayIter; * to be shared for primitive types, too! * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java index d3d278ee..8e838b4e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java @@ -29,6 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. * primitive in Java. * * @author Erich Schubert + * @since 0.5.5 */ public final class IntArrayStaticHistogram extends AbstractObjStaticHistogram<int[]> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java index 4d3a5045..13ab7b35 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil; * bins to the data fed into the histogram. * * @author Erich Schubert + * @since 0.5.5 */ public class IntDynamicHistogram extends IntStaticHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java index d448c852..ce2b39aa 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * Histogram storing int values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java index bd367837..3cbe83bc 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java @@ -32,6 +32,7 @@ import java.util.Arrays; * left and right. * * @author Erich Schubert + * @since 0.5.5 */ public class IntStaticHistogram extends AbstractStaticHistogram implements IntHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java index 907fa7ca..a922935a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java @@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * primitive in Java. * * @author Erich Schubert + * @since 0.5.5 */ public final class LongArrayStaticHistogram extends AbstractObjStaticHistogram<long[]> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java index 78385a30..cc5b5dc6 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil; * bins to the data fed into the histogram. * * @author Erich Schubert + * @since 0.5.5 */ public class LongDynamicHistogram extends LongStaticHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java index ec1ba994..893e0f47 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * Histogram storing long values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java index ae37dbcc..9cc201ae 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java @@ -32,6 +32,7 @@ import java.util.Arrays; * left and right. * * @author Erich Schubert + * @since 0.5.5 */ public class LongStaticHistogram extends AbstractStaticHistogram implements LongHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java index f3d054cd..5adcc9bd 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java @@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.math.MeanVariance; * left and right. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.composedOf MeanVariance */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java index e1d75b76..2ce2926f 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * Basic interface for object based histograms (static and flexible). * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter * diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java index 8fd1ffbd..d0a932a1 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil; * bins to the data fed into the histogram. * * @author Erich Schubert + * @since 0.5.5 */ public class ShortDynamicHistogram extends ShortStaticHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java index 706d43e8..14e1ec55 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram; * Histogram storing short values. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.has Iter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java index 4c49f595..ebfc6365 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java @@ -32,6 +32,7 @@ import java.util.Arrays; * left and right. * * @author Erich Schubert + * @since 0.5.5 */ public class ShortStaticHistogram extends AbstractStaticHistogram implements ShortHistogram { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java index d3deb054..3f26f417 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator; * Array iterators can also go backwards and seek. * * @author Erich Schubert + * @since 0.2 * * @apiviz.excludeSubtypes */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java index 175ccfb2..441eaee4 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java @@ -32,6 +32,7 @@ import java.util.List; * access and seeking (i.e. ArrayLists, but not Linked Lists!) * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.excludeSubtypes * diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java index d362ff37..23cf34fe 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java @@ -52,6 +52,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator; * </pre> * * @author Erich Schubert + * @since 0.5.0 * * @apiviz.landmark * @apiviz.excludeSubtypes diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java index b7b69cc7..557870de 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java @@ -40,6 +40,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator; * </pre> * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.excludeSubtypes */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFind.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFind.java index bbba1c8e..55b0b561 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFind.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFind.java @@ -27,9 +27,10 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef; import de.lmu.ifi.dbs.elki.database.ids.DBIDs; /** - * Union-find implementations in ELKI + * Union-find implementations in ELKI, for DBID objects. * * @author Erich Schubert + * @since 0.7.0 */ public interface UnionFind { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFindUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFindUtil.java index ee403a66..38ec2559 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFindUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFindUtil.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.StaticDBIDs; * Union-find algorithm factory, to choose the best implementation. * * @author Erich Schubert + * @since 0.7.0 */ public class UnionFindUtil { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionInteger.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionInteger.java new file mode 100644 index 00000000..b7fc8478 --- /dev/null +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionInteger.java @@ -0,0 +1,174 @@ +package de.lmu.ifi.dbs.elki.utilities.datastructures.unionfind; + +/* + This file is part of ELKI: + Environment for Developing KDD-Applications Supported by Index-Structures + + Copyright (C) 2016 + Ludwig-Maximilians-Universität München + Lehr- und Forschungseinheit für Datenbanksysteme + ELKI Development Team + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +import java.util.Arrays; + +import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; +import gnu.trove.list.TIntList; +import gnu.trove.list.array.TIntArrayList; + +/** + * Union-find algorithm for primitive integers, with optimizations. + * + * This is the weighted quick union approach, weighted by count and using + * path-halving for optimization. + * + * Reference: + * <p> + * R. Sedgewick<br /> + * 1.3 Union-Find Algorithms<br /> + * Algorithms in C, Parts 1-4 + * </p> + * + * @author Erich Schubert + * @since 0.7.0 + */ +@Reference(authors = "R. Sedgewick", // +title = "1.3 Union-Find Algorithms", // +booktitle = "Algorithms in C, Parts 1-4") +public class WeightedQuickUnionInteger { + /** + * Number of used indexes. + */ + private int used; + + /** + * Parent element + */ + private int[] parent; + + /** + * Weight, for optimization. + */ + private int[] weight; + + /** + * Initial size. + */ + private static final int INITIAL_SIZE = 51; + + /** + * Constructor. + */ + public WeightedQuickUnionInteger() { + weight = new int[INITIAL_SIZE]; + parent = new int[INITIAL_SIZE]; + } + + /** + * Occupy the next unused index. + * + * @param weight Initial weight. + * @return Next unused index. + */ + public int nextIndex(int weight) { + if(used == parent.length) { + int nsize = used + (used >> 1); + this.weight = Arrays.copyOf(this.weight, nsize); + this.parent = Arrays.copyOf(this.parent, nsize); + } + this.weight[used] = weight; + this.parent[used] = used; + return used++; + } + + /** + * Find the parent of an object. + * + * @param cur Current entry + * @return Parent entry + */ + public int find(int cur) { + assert (cur >= 0 && cur < parent.length); + int p = parent[cur], tmp; + while(cur != p) { + tmp = p; + p = parent[cur] = parent[p]; // Perform simple path compression. + cur = tmp; + } + return cur; + } + + /** + * Join the components of elements p and q. + * + * @param first First element + * @param second Second element + * @return Component id. + */ + public int union(int first, int second) { + int firstComponent = find(first), secondComponent = find(second); + if(firstComponent == secondComponent) { + return firstComponent; + } + final int w1 = weight[firstComponent], w2 = weight[secondComponent]; + if(w1 > w2) { + parent[secondComponent] = firstComponent; + weight[firstComponent] += w2; + return firstComponent; + } + else { + parent[firstComponent] = secondComponent; + weight[secondComponent] += w1; + return secondComponent; + } + } + + /** + * Test if two components are connected. + * + * @param first First element + * @param second Second element + * @return {@code true} if they are in the same component. + */ + public boolean isConnected(int first, int second) { + return find(first) == find(second); + } + + /** + * Collect all component root elements. + * + * @return Root elements + */ + public TIntList getRoots() { + TIntList roots = new TIntArrayList(); + for(int i = 0; i < used; i++) { + // roots or one element in component + if(parent[i] == i) { + roots.add(i); + } + } + return roots; + } + + /** + * Number of allocated indexes. + * + * @return Index number. + */ + public int size() { + return used; + } +} diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionRangeDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionRangeDBIDs.java index 60c719e2..5440e2b5 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionRangeDBIDs.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionRangeDBIDs.java @@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * * @author Evgeniy Faerman * @author Erich Schubert + * @since 0.7.0 */ @Reference(authors = "R. Sedgewick", // title = "1.3 Union-Find Algorithms", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionStaticDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionStaticDBIDs.java index 0e4dd24b..9ed8d618 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionStaticDBIDs.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionStaticDBIDs.java @@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * * @author Evgeniy Faerman * @author Erich Schubert + * @since 0.7.0 */ @Reference(authors = "R. Sedgewick", // title = "1.3 Union-Find Algorithms", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Description.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Description.java index 163af834..1b4963bd 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Description.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Description.java @@ -33,6 +33,7 @@ import java.lang.annotation.Target; * Class/algorithm description * * @author Erich Schubert + * @since 0.3 */ @Documented @Retention(RetentionPolicy.RUNTIME) diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/DocumentationUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/DocumentationUtil.java index 0fbc3b96..6caa488b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/DocumentationUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/DocumentationUtil.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.documentation; * Utilities for extracting documentation from class annotations. * * @author Erich Schubert + * @since 0.3 * * @apiviz.uses de.lmu.ifi.dbs.elki.utilities.documentation.Title * @apiviz.uses de.lmu.ifi.dbs.elki.utilities.documentation.Description diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Reference.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Reference.java index 9c84661e..9e8a37ff 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Reference.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Reference.java @@ -33,6 +33,7 @@ import java.lang.annotation.Target; * Annotation to specify a reference. * * @author Erich Schubert + * @since 0.3 */ @Documented @Retention(RetentionPolicy.RUNTIME) diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Restricted.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Restricted.java index 29955acf..a1725b64 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Restricted.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Restricted.java @@ -34,6 +34,7 @@ import java.lang.annotation.Target; * associated patents, and therefore must not be included in the release. * * @author Erich Schubert + * @since 0.3 */ @Documented @Retention(RetentionPolicy.RUNTIME) diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Title.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Title.java index 77889f03..5e7af068 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Title.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Title.java @@ -33,6 +33,7 @@ import java.lang.annotation.Target; * Simple interface to provide a nicer title for the class. * * @author Erich Schubert + * @since 0.3 */ @Documented @Retention(RetentionPolicy.RUNTIME) diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVoting.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVoting.java index 994b8a1b..12e15692 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVoting.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVoting.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.ensemble; * Interface for ensemble voting rules * * @author Erich Schubert + * @since 0.4.0 */ public interface EnsembleVoting { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingInverseMultiplicative.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingInverseMultiplicative.java index 0b4c245f..f0238cc1 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingInverseMultiplicative.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingInverseMultiplicative.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; * {@code 1-product(1-s_i)} * * @author Erich Schubert + * @since 0.5.0 */ public class EnsembleVotingInverseMultiplicative implements EnsembleVoting { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMax.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMax.java index 67e86277..ba59c1c1 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMax.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMax.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.ensemble; * Simple combination rule, by taking the maximum. * * @author Erich Schubert + * @since 0.2 */ public class EnsembleVotingMax implements EnsembleVoting { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMean.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMean.java index 8eec61e4..bf26f9ed 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMean.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMean.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.ensemble; * Simple combination rule, by taking the mean * * @author Erich Schubert + * @since 0.2 */ public class EnsembleVotingMean implements EnsembleVoting { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMedian.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMedian.java index ddd81d40..d48bd474 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMedian.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMedian.java @@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * Note: median is very similar to a <em>majority voting</em>! * * @author Erich Schubert + * @since 0.4.0 */ public class EnsembleVotingMedian implements EnsembleVoting { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMin.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMin.java index 99f193c1..2916be9b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMin.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMin.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.ensemble; * Simple combination rule, by taking the minimum. * * @author Erich Schubert + * @since 0.5.0 */ public class EnsembleVotingMin implements EnsembleVoting { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMultiplicative.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMultiplicative.java index 5e4f34cd..adfa5b71 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMultiplicative.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMultiplicative.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; * {@code product(s_i)} * * @author Erich Schubert + * @since 0.5.0 */ public class EnsembleVotingMultiplicative implements EnsembleVoting { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/APIViolationException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/APIViolationException.java index b6a56a48..82632083 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/APIViolationException.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/APIViolationException.java @@ -36,6 +36,7 @@ package de.lmu.ifi.dbs.elki.utilities.exceptions; * the Java compiler). * * @author Erich Schubert + * @since 0.4.0 */ public class APIViolationException extends AbortException { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/AbortException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/AbortException.java index 678abdd9..764c68e8 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/AbortException.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/AbortException.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.exceptions; * Exception for aborting some process and transporting a message. * * @author Arthur Zimek + * @since 0.2 */ public class AbortException extends RuntimeException { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ExceptionMessages.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ExceptionMessages.java index 68560813..c0302f97 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ExceptionMessages.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ExceptionMessages.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.exceptions; * Interface to collect exception messages that are used in several cases. * * @author Arthur Zimek + * @since 0.2 */ public interface ExceptionMessages { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/NotImplementedException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/NotImplementedException.java index 89f33361..ac116a38 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/NotImplementedException.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/NotImplementedException.java @@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.exceptions; * See {@link ExceptionMessages} for common explanations. * * @author Erich Schubert + * @since 0.4.0 */ public class NotImplementedException extends AbortException { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ObjectNotFoundException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ObjectNotFoundException.java index f44c11b9..1275c6ae 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ObjectNotFoundException.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ObjectNotFoundException.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBID; * Exception thrown when the requested object was not found in the database. * * @author Erich Schubert + * @since 0.4.0 */ public class ObjectNotFoundException extends RuntimeException { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/UnableToComplyException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/UnableToComplyException.java index ee00ff06..c004e401 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/UnableToComplyException.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/UnableToComplyException.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.exceptions; * General Exception to state inability to execute an operation. * * @author Arthur Zimek + * @since 0.2 */ @SuppressWarnings("serial") public class UnableToComplyException extends Exception { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/BufferedLineReader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/BufferedLineReader.java index b93c28bf..d387093e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/BufferedLineReader.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/BufferedLineReader.java @@ -28,12 +28,13 @@ import java.io.InputStreamReader; /** * Class for buffered IO, avoiding some of the overheads of the Java API. - * + * * The main difference to the standard Java API is that this implementation will * reuse the buffer. <b>After a call to {@code nextLine()}, the buffer will be * overwitten!</b> - * + * * @author Erich Schubert + * @since 0.7.0 */ public class BufferedLineReader implements AutoCloseable { /** @@ -44,7 +45,7 @@ public class BufferedLineReader implements AutoCloseable { /** * The buffer we read the data into. */ - protected StringBuilder buf = new StringBuilder(); + protected StringBuilder buf = new StringBuilder(1024); /** * Current line number. @@ -98,9 +99,9 @@ public class BufferedLineReader implements AutoCloseable { /** * Reset to a new line reader. - * + * * <b>A previous reader will not be closed automatically!</b> - * + * * @param r New reader */ public void reset(LineReader r) { @@ -110,9 +111,9 @@ public class BufferedLineReader implements AutoCloseable { /** * Reset to a new line reader. - * + * * <b>A previous stream will not be closed automatically!</b> - * + * * @param in New input stream reader */ public void reset(InputStream in) { @@ -122,9 +123,9 @@ public class BufferedLineReader implements AutoCloseable { /** * Reset to a new line reader. - * + * * <b>A previous stream will not be closed automatically!</b> - * + * * @param in New input stream reader */ public void reset(InputStreamReader in) { @@ -134,9 +135,9 @@ public class BufferedLineReader implements AutoCloseable { /** * Get the reader buffer. - * + * * <b>After a call to {@code nextLine()}, the buffer will be overwitten!</b> - * + * * @return Buffer. */ public CharSequence getBuffer() { @@ -145,7 +146,7 @@ public class BufferedLineReader implements AutoCloseable { /** * Get the current line number. - * + * * @return Current line number */ public int getLineNumber() { @@ -154,7 +155,7 @@ public class BufferedLineReader implements AutoCloseable { /** * Read the next line. - * + * * @return {@code true} if another line was read successfully. * @throws IOException on IO errors. */ @@ -179,7 +180,7 @@ public class BufferedLineReader implements AutoCloseable { /** * Get the length of the string, not taking trailing linefeeds into account. - * + * * @param line Input line * @return Length */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteArrayUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteArrayUtil.java index 49493e33..8cb7570a 100755 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteArrayUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteArrayUtil.java @@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException; * {@link java.io.ByteArrayOutputStream} * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.landmark * diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferInputStream.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferInputStream.java index 138957bd..1fcb1f3c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferInputStream.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferInputStream.java @@ -30,6 +30,7 @@ import java.nio.ByteBuffer; * Wrap an existing ByteBuffer as InputStream. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has ByteBuffer */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferOutputStream.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferOutputStream.java index 3e2b397c..8e07f075 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferOutputStream.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferOutputStream.java @@ -30,6 +30,7 @@ import java.nio.ByteBuffer; * Wrap an existing ByteBuffer as OutputStream. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has ByteBuffer */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferSerializer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferSerializer.java index 94f882ab..c58d6063 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferSerializer.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferSerializer.java @@ -30,6 +30,7 @@ import java.nio.ByteBuffer; * Class to convert from and to byte arrays (in index structures). * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.has ByteBuffer - - oneway «serializes to/from» * @apiviz.excludeSubtypes diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/FixedSizeByteBufferSerializer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/FixedSizeByteBufferSerializer.java index ac966c7e..e360fc43 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/FixedSizeByteBufferSerializer.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/FixedSizeByteBufferSerializer.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.io; * Serializers with a fixed length serialization. * * @author Erich Schubert + * @since 0.4.0 * @apiviz.excludeSubtypes * * @param <T> Type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/LineReader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/LineReader.java index 3bec4ad4..01b1336d 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/LineReader.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/LineReader.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.io; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2015 + Copyright (C) 2016 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -30,43 +30,52 @@ import java.io.Reader; /** * Fast class to read a file, line per line. - * + * * Lines must be split using Unix newlines <code>\n</code>, linefeeds * <code>\r</code> are ignored. - * + * * This is a rather minimal implementation, which supposedly pays off in * performance. In particular, this class allows recycling the buffer, which * will yield less object allocations and thus less garbage collection. - * + * * Usage example: - * + * * <pre> * StringBuilder buf = new StringBuilder(); * LineReader reader = new LineReader(inputStream); * // Clear buffer, and append next line. - * while(reader.readLine(buf.delete(0, buf.length()))) { + * while(reader.readLine(buf.setLength(0))) { * // process string in buffer. * } * </pre> - * + * * @author Erich Schubert + * @since 0.7.0 */ public class LineReader implements AutoCloseable { - /** Buffer size to use */ + /** + * Default buffer size to use + */ final static int BUFFER_SIZE = 4096; - /** Input stream to read from */ + /** + * Input stream to read from + */ Reader in; - /** Character buffer */ - char[] buffer = new char[BUFFER_SIZE]; + /** + * Character buffer + */ + char[] buffer; - /** Current position, and length of buffer */ + /** + * Current position, and length of buffer + */ int pos = 0, end = 0; /** * Constructor - * + * * @param in Stream */ public LineReader(InputStream in) { @@ -75,16 +84,37 @@ public class LineReader implements AutoCloseable { /** * Constructor - * + * * @param in Reader */ public LineReader(Reader in) { + this(in, BUFFER_SIZE); + } + + /** + * Constructor + * + * @param in Reader + * @param buffersize Buffer size + */ + public LineReader(InputStream in, int buffersize) { + this(new InputStreamReader(in), buffersize); + } + + /** + * Constructor + * + * @param in Reader + * @param buffersize Buffer size + */ + public LineReader(Reader in, int buffersize) { this.in = in; + this.buffer = new char[buffersize]; } /** * Read a line into the given buffer. - * + * * @param buf Buffer. * @return {@code true} if some characters have been read. */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/TokenizedReader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/TokenizedReader.java index f9363d57..0afcb9ab 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/TokenizedReader.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/TokenizedReader.java @@ -31,6 +31,7 @@ import java.util.regex.Pattern; * Reader that will tokenize the input data as desired. * * @author Erich Schubert + * @since 0.7.0 * * @apiviz.composedOf Tokenizer */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/Tokenizer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/Tokenizer.java index 67339cd2..b86923d7 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/Tokenizer.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/Tokenizer.java @@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter; * String tokenizer. * * @author Erich Schubert + * @since 0.6.0 */ public class Tokenizer implements Iter { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/AbstractParameterizer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/AbstractParameterizer.java index f8a7b390..a3559e86 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/AbstractParameterizer.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/AbstractParameterizer.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz * Abstract base class that handles the parameterization of a class. * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.uses Parameterization * @apiviz.has de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/InternalParameterizationErrors.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/InternalParameterizationErrors.java index 3301c31c..9173cc24 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/InternalParameterizationErrors.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/InternalParameterizationErrors.java @@ -32,6 +32,7 @@ import java.util.Collection; * This is meant for reporting re-parameterization errors. * * @author Erich Schubert + * @since 0.3 */ public class InternalParameterizationErrors extends ParameterException { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/NoParameterValueException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/NoParameterValueException.java index 50ad6215..36c23718 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/NoParameterValueException.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/NoParameterValueException.java @@ -25,6 +25,9 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling; /** * Thrown by OptionHandler in case of incorrect parameter-array. + * + * @author Arthur Zimek + * @since 0.2 */ public class NoParameterValueException extends ParameterException { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionID.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionID.java index 20cdc6c7..67c6326e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionID.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionID.java @@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling; * within this class. * * @author Elke Achtert + * @since 0.2 */ public final class OptionID { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionUtil.java index a72035f9..2f0def2b 100755 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionUtil.java @@ -39,6 +39,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; /** * Utility functions related to Option handling. * + * @author Erich Schubert + * @since 0.2 + * * @apiviz.uses Parameter */ public final class OptionUtil { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/ParameterException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/ParameterException.java index 2a456fed..9527b946 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/ParameterException.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/ParameterException.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling; * Abstract super class for all exceptions thrown during parameterization. * * @author Elke Achtert + * @since 0.2 */ @SuppressWarnings("serial") public abstract class ParameterException extends Exception { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/Parameterizer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/Parameterizer.java index 2931309f..c0134b40 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/Parameterizer.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/Parameterizer.java @@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz * To instantiate a class, use {@link Parameterization#tryInstantiate(Class)}! * * @author Erich Schubert + * @since 0.4.0 */ public interface Parameterizer { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnspecifiedParameterException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnspecifiedParameterException.java index c7a9909c..5569a648 100755 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnspecifiedParameterException.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnspecifiedParameterException.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * Exception when a required parameter was not given. * * @author Erich Schubert + * @since 0.2 */ public class UnspecifiedParameterException extends WrongParameterValueException { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnusedParameterException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnusedParameterException.java index 016cdf76..7cd86f8c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnusedParameterException.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnusedParameterException.java @@ -23,9 +23,11 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling; along with this program. If not, see <http://www.gnu.org/licenses/>. */ - /** * Thrown by OptionHandler in case of request of an unused parameter. + * + * @author Arthur Zimek + * @since 0.2 */ @SuppressWarnings("serial") public class UnusedParameterException extends ParameterException { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/WrongParameterValueException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/WrongParameterValueException.java index c0bd4b40..cd24cf66 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/WrongParameterValueException.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/WrongParameterValueException.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * Thrown by a Parameterizable object in case of wrong parameter format. * * @author Steffi Wanka + * @since 0.2 */ public class WrongParameterValueException extends ParameterException { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AbstractNumberConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AbstractNumberConstraint.java index b08da639..815ccdef 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AbstractNumberConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AbstractNumberConstraint.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints; * Abstract super class for constraints dealing with a certain number value. * * @author Elke Achtert + * @since 0.2 * * @apiviz.uses * de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AllOrNoneMustBeSetGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AllOrNoneMustBeSetGlobalConstraint.java index f468af92..3430fd81 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AllOrNoneMustBeSetGlobalConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AllOrNoneMustBeSetGlobalConstraint.java @@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * parameters ({@link Parameter}) must be set, or none of them. * * @author Steffi Wanka + * @since 0.2 */ public class AllOrNoneMustBeSetGlobalConstraint implements GlobalParameterConstraint { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/CommonConstraints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/CommonConstraints.java index 3507e946..09df14df 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/CommonConstraints.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/CommonConstraints.java @@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints; * Class storing a number of very common constraints. * * @author Erich Schubert + * @since 0.6.0 * * @apiviz.landmark * @apiviz.composedOf ParameterConstraint diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualSizeGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualSizeGlobalConstraint.java index ae817a7a..e6257e47 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualSizeGlobalConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualSizeGlobalConstraint.java @@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ListParameter; * ) must have equal list sizes. * * @author Steffi Wanka + * @since 0.2 */ public class EqualSizeGlobalConstraint implements GlobalParameterConstraint { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualStringConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualStringConstraint.java index 52ac3ff6..e7379b6a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualStringConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualStringConstraint.java @@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * ) to be tested is equal to the specified constraint-strings. * * @author Steffi Wanka + * @since 0.2 * * @apiviz.uses de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.StringParameter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalListSizeConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalListSizeConstraint.java index 05d391b3..21669a38 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalListSizeConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalListSizeConstraint.java @@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ListParameter; * specified by the integer parameter ({@link IntParameter}) given. * * @author Steffi Wanka + * @since 0.2 */ public class GlobalListSizeConstraint implements GlobalParameterConstraint { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalParameterConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalParameterConstraint.java index c01802bc..ae1ea824 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalParameterConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalParameterConstraint.java @@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException; * The proper constraint test should be implemented in the method {@link #test()}. * </p> * @author Steffi Wanka + * @since 0.2 * */ public interface GlobalParameterConstraint { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalVectorListElementSizeConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalVectorListElementSizeConstraint.java index 79d67a2c..b162fc4a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalVectorListElementSizeConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalVectorListElementSizeConstraint.java @@ -23,24 +23,24 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector; import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.VectorListParameter; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleArrayListParameter; /** * Global parameter constraint for testing if the dimensions of each vector - * specified by a given vector list parameter ({@link VectorListParameter}) + * specified by a given vector list parameter ({@link DoubleArrayListParameter}) * correspond to the value of a integer parameter ({@link IntParameter}) given. * * @author Steffi Wanka + * @since 0.2 */ public class GlobalVectorListElementSizeConstraint implements GlobalParameterConstraint { /** * Vector list parameter. */ - private VectorListParameter vector; + private DoubleArrayListParameter vector; /** * Integer parameter providing the size constraint. @@ -56,7 +56,7 @@ public class GlobalVectorListElementSizeConstraint implements GlobalParameterCon * @param vector the vector list parameter * @param sizeConstraint the integer parameter providing the size constraint */ - public GlobalVectorListElementSizeConstraint(VectorListParameter vector, IntParameter sizeConstraint) { + public GlobalVectorListElementSizeConstraint(DoubleArrayListParameter vector, IntParameter sizeConstraint) { this.vector = vector; this.size = sizeConstraint; } @@ -73,9 +73,12 @@ public class GlobalVectorListElementSizeConstraint implements GlobalParameterCon return; } - for(Vector vec : vector.getValue()) { - if(vec.getDimensionality() != size.intValue()) { - throw new WrongParameterValueException("Global Parameter Constraint Error.\n" + "The vectors of vector list parameter " + vector.getName() + " have not the required dimension of " + size.getValue() + " given by integer parameter " + size.getName() + "."); + for(double[] vec : vector.getValue()) { + if(vec.length != size.intValue()) { + throw new WrongParameterValueException("Global Parameter Constraint Error.\n" // + + "The vectors of vector list parameter " + vector.getName() // + + " have not the required dimension of " + size.getValue() // + + " given by integer parameter " + size.getName() + "."); } } } @@ -84,4 +87,4 @@ public class GlobalVectorListElementSizeConstraint implements GlobalParameterCon public String getDescription() { return "The dimensionality of the vectors of vector list parameter " + vector.getName() + " must have the value of integer parameter " + size.getName(); } -}
\ No newline at end of file +} diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterConstraint.java index 002ff4f3..b9e445d1 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterConstraint.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter; * constraint value. * * @author Steffi Wanka + * @since 0.2 */ public class GreaterConstraint extends AbstractNumberConstraint<Number> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterEqualConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterEqualConstraint.java index fab416d4..a8791f97 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterEqualConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterEqualConstraint.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter; * than the specified constraint value. * * @author Steffi Wanka + * @since 0.2 */ public class GreaterEqualConstraint extends AbstractNumberConstraint<Number> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessConstraint.java index c63fa1ea..c2b73d1d 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessConstraint.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter; * constraint value. * * @author Steffi Wanka + * @since 0.2 */ public class LessConstraint extends AbstractNumberConstraint<Number> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualConstraint.java index 8aef29b4..a8c210d4 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualConstraint.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter; * the specified constraint value. * * @author Steffi Wanka + * @since 0.2 */ public class LessEqualConstraint extends AbstractNumberConstraint<Number> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualGlobalConstraint.java index c3f4ef09..10f12988 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualGlobalConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualGlobalConstraint.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter; * the value of the second number parameter ({@link NumberParameter}). * * @author Steffi Wanka + * @since 0.2 * @param <T> Number type */ public class LessEqualGlobalConstraint<T extends Number> implements GlobalParameterConstraint { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessGlobalConstraint.java index 0ab9fbae..57b9d473 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessGlobalConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessGlobalConstraint.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter; * value of the second number parameter ({@link NumberParameter}) given. * * @author Steffi Wanka + * @since 0.2 * @param <T> Number type */ public class LessGlobalConstraint<T extends Number> implements GlobalParameterConstraint { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListEachConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListEachConstraint.java index 764b1773..ff1aba69 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListEachConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListEachConstraint.java @@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException; * Applies constraints to all elements of a list. * * @author Erich Schubert + * @since 0.5.5 * * @apiviz.composedOf ParameterConstraint oneway 1 n */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListParameterNoDuplicateValueConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListParameterNoDuplicateValueConstraint.java index e0dfe3e1..f5c052b6 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListParameterNoDuplicateValueConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListParameterNoDuplicateValueConstraint.java @@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * is not allowed to have duplicate values. * * @author Arthur Zimek + * @since 0.5.5 */ public class ListParameterNoDuplicateValueConstraint<T extends Object> implements ParameterConstraint<List<T>> { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListSizeConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListSizeConstraint.java index 0969ac06..c9f273de 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListSizeConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListSizeConstraint.java @@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ListParameter; * FIXME: Unfortunately, we cannot have good type safety anymore right now. * * @author Steffi Wanka + * @since 0.2 * * @apiviz.uses * de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ListParameter diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/NoDuplicateValueGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/NoDuplicateValueGlobalConstraint.java index 4efd6118..55ea5363 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/NoDuplicateValueGlobalConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/NoDuplicateValueGlobalConstraint.java @@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * parameters ({@link NumberParameter}) are not allowed to have the same value. * * @author Steffi Wanka + * @since 0.2 */ public class NoDuplicateValueGlobalConstraint implements GlobalParameterConstraint { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OneMustBeSetGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OneMustBeSetGlobalConstraint.java index af35e3e9..9ed325f4 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OneMustBeSetGlobalConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OneMustBeSetGlobalConstraint.java @@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * set. * * @author Steffi Wanka + * @since 0.2 */ public class OneMustBeSetGlobalConstraint implements GlobalParameterConstraint { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OnlyOneIsAllowedToBeSetGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OnlyOneIsAllowedToBeSetGlobalConstraint.java index c37a05f2..58c69dd9 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OnlyOneIsAllowedToBeSetGlobalConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OnlyOneIsAllowedToBeSetGlobalConstraint.java @@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * parameters ({@link Parameter}) is allowed to be set. * * @author Steffi Wanka + * @since 0.2 */ public class OnlyOneIsAllowedToBeSetGlobalConstraint implements GlobalParameterConstraint { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterConstraint.java index 99009941..9061533b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterConstraint.java @@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException; * </p> * * @author Steffi Wanka + * @since 0.2 * @param <T> the type of the parameter the constraint applies to */ public interface ParameterConstraint<T> { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterFlagGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterFlagGlobalConstraint.java index 03e4b9e1..3de8ecb2 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterFlagGlobalConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterFlagGlobalConstraint.java @@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * not. * * @author Steffi Wanka + * @since 0.2 * * @apiviz.uses de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag * @apiviz.uses diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/StringLengthConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/StringLengthConstraint.java index 50417b21..7a6acd32 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/StringLengthConstraint.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/StringLengthConstraint.java @@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * . * * @author Erich Schubert + * @since 0.4.0 * * @apiviz.uses de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.StringParameter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java index 4980af5f..67180790 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java @@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * Abstract class with shared code for parameterization handling. * * @author Erich Schubert + * @since 0.3 */ public abstract class AbstractParameterization implements Parameterization { // TODO: refactor "tryInstantiate" even in a higher class? diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java index 98cfa5a9..f4f8ca3c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java @@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * for examples. * * @author Erich Schubert + * @since 0.3 */ public class ChainedParameterization extends AbstractParameterization { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java index fe1de0be..c89a1420 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * Parameterization handler that only allows the use of default values. * * @author Erich Schubert + * @since 0.3 */ public class EmptyParameterization extends AbstractParameterization { @Override diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java index c67533a6..542c98ef 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java @@ -33,24 +33,25 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; -import de.lmu.ifi.dbs.elki.utilities.pairs.Pair; /** * Parameterization handler using a List and OptionIDs, for programmatic use. * * @author Erich Schubert + * @since 0.3 */ public class ListParameterization extends AbstractParameterization { /** * The actual parameters, for storage */ - LinkedList<Pair<OptionID, Object>> parameters = new LinkedList<>(); + List<ParameterPair> parameters; /** * Default constructor. */ public ListParameterization() { super(); + this.parameters = new LinkedList<>(); } /** @@ -58,10 +59,11 @@ public class ListParameterization extends AbstractParameterization { * * @param dbParameters existing parameter collection */ - public ListParameterization(Collection<Pair<OptionID, Object>> dbParameters) { + public ListParameterization(Collection<ParameterPair> dbParameters) { this(); - for (Pair<OptionID, Object> pair : dbParameters) { - addParameter(pair.first, pair.second); + this.parameters = new LinkedList<>(); + for(ParameterPair pair : dbParameters) { + addParameter(pair.option, pair.value); } } @@ -71,7 +73,7 @@ public class ListParameterization extends AbstractParameterization { * @param optionid Option ID */ public void addFlag(OptionID optionid) { - parameters.add(new Pair<OptionID, Object>(optionid, Flag.SET)); + parameters.add(new ParameterPair(optionid, Flag.SET)); } /** @@ -81,7 +83,7 @@ public class ListParameterization extends AbstractParameterization { * @param value Value */ public void addParameter(OptionID optionid, Object value) { - parameters.add(new Pair<>(optionid, value)); + parameters.add(new ParameterPair(optionid, value)); } /** @@ -90,7 +92,7 @@ public class ListParameterization extends AbstractParameterization { * @param flag Flag to add, if set */ public void forwardOption(Flag flag) { - if (flag.isDefined() && flag.getValue().booleanValue()) { + if(flag.isDefined() && flag.getValue().booleanValue()) { addFlag(flag.getOptionID()); } } @@ -101,19 +103,19 @@ public class ListParameterization extends AbstractParameterization { * @param param Parameter to add */ public void forwardOption(Parameter<?> param) { - if (param.isDefined()) { + if(param.isDefined()) { addParameter(param.getOptionID(), param.getValue()); } } @Override public boolean setValueForOption(Parameter<?> opt) throws ParameterException { - Iterator<Pair<OptionID, Object>> iter = parameters.iterator(); - while (iter.hasNext()) { - Pair<OptionID, Object> pair = iter.next(); - if (pair.first == opt.getOptionID()) { + Iterator<ParameterPair> iter = parameters.iterator(); + while(iter.hasNext()) { + ParameterPair pair = iter.next(); + if(pair.option == opt.getOptionID()) { iter.remove(); - opt.setValue(pair.second); + opt.setValue(pair.value); return true; } } @@ -125,7 +127,7 @@ public class ListParameterization extends AbstractParameterization { * * @return Unused parameters. */ - public List<Pair<OptionID, Object>> getRemainingParameters() { + public List<ParameterPair> getRemainingParameters() { return parameters; } @@ -145,9 +147,9 @@ public class ListParameterization extends AbstractParameterization { @Override public String toString() { StringBuilder buf = new StringBuilder(); - for (Pair<OptionID, Object> pair : parameters) { - buf.append('-').append(pair.getFirst().toString()).append(' '); - buf.append(pair.getSecond().toString()).append(' '); + for(ParameterPair pair : parameters) { + buf.append('-').append(pair.option.toString()).append(' '); + buf.append(pair.value.toString()).append(' '); } return buf.toString(); } @@ -159,16 +161,53 @@ public class ListParameterization extends AbstractParameterization { */ public ArrayList<String> serialize() { ArrayList<String> params = new ArrayList<>(); - for (Pair<OptionID, Object> pair : parameters) { - params.add("-" + pair.getFirst().toString()); - if (pair.getSecond() instanceof String) { - params.add((String) pair.getSecond()); - } else if (pair.getSecond() instanceof Class) { - params.add(((Class<?>) pair.getSecond()).getCanonicalName()); - } else { // Fallback: - params.add(pair.getSecond().toString()); + for(ParameterPair pair : parameters) { + params.add("-" + pair.option.toString()); + if(pair.value instanceof String) { + params.add((String) pair.value); + } + else if(pair.value instanceof Class) { + params.add(((Class<?>) pair.value).getCanonicalName()); + } + else { // Fallback: + params.add(pair.value.toString()); } } return params; } + + /** + * Parameter pair, package-private. + * + * @author Erich Schubert + * + * @apiviz.exclude + */ + static final class ParameterPair { + /** + * Option key. + */ + public OptionID option; + + /** + * Option value. + */ + public Object value; + + /** + * Constructor. + * + * @param key Option key + * @param value Option value + */ + public ParameterPair(OptionID key, Object value) { + this.option = key; + this.value = value; + } + + @Override + public String toString() { + return "-" + option.getName() + " " + value; + } + } } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java index 4faa3c60..926e660f 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java @@ -23,17 +23,16 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import java.util.Collection; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil; import de.lmu.ifi.dbs.elki.utilities.optionhandling.InternalParameterizationErrors; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GlobalParameterConstraint; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.ListParameterization.ParameterPair; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; -import de.lmu.ifi.dbs.elki.utilities.pairs.Pair; /** * This configuration can be "rewound" to allow the same values to be consumed @@ -42,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair; * e.g. in visualization classes. * * @author Erich Schubert + * @since 0.3 */ // TODO: Can we merge MergedParameterization and TrackParameters into one? public class MergedParameterization implements Parameterization { @@ -58,7 +58,7 @@ public class MergedParameterization implements Parameterization { /** * Parameters to rewind. */ - final private List<Pair<OptionID, Object>> used; + final private List<ParameterPair> used; /** * Constructor. @@ -79,7 +79,7 @@ public class MergedParameterization implements Parameterization { * @param current Current parameterization to re-used * @param used Used parameters list. */ - private MergedParameterization(Parameterization inner, ListParameterization current, List<Pair<OptionID, Object>> used) { + private MergedParameterization(Parameterization inner, ListParameterization current, List<ParameterPair> used) { super(); this.inner = inner; this.current = current; @@ -91,8 +91,8 @@ public class MergedParameterization implements Parameterization { */ public void rewind() { synchronized(used) { - for(Pair<OptionID, Object> pair : used) { - current.addParameter(pair.first, pair.second); + for(ParameterPair pair : used) { + current.addParameter(pair.option, pair.value); } used.clear(); } @@ -102,7 +102,7 @@ public class MergedParameterization implements Parameterization { public boolean setValueForOption(Parameter<?> opt) throws ParameterException { try { if(current.setValueForOption(opt)) { - used.add(new Pair<OptionID, Object>(opt.getOptionID(), opt.getValue())); + used.add(new ParameterPair(opt.getOptionID(), opt.getValue())); return true; } } @@ -110,10 +110,10 @@ public class MergedParameterization implements Parameterization { current.reportError(e); } if(inner.setValueForOption(opt)) { - used.add(new Pair<OptionID, Object>(opt.getOptionID(), opt.getValue())); + used.add(new ParameterPair(opt.getOptionID(), opt.getValue())); return true; } - used.add(new Pair<OptionID, Object>(opt.getOptionID(), opt.getDefaultValue())); + used.add(new ParameterPair(opt.getOptionID(), opt.getDefaultValue())); return false; } @@ -128,7 +128,7 @@ public class MergedParameterization implements Parameterization { public Collection<ParameterException> getErrors() { return current.getErrors(); } - + @Override public boolean hasErrors() { return current.hasErrors(); @@ -142,11 +142,11 @@ public class MergedParameterization implements Parameterization { @Override public boolean grab(Parameter<?> opt) { try { - if (setValueForOption(opt)) { + if(setValueForOption(opt)) { return true; } // Try default value instead. - if (opt.tryDefaultValue()) { + if(opt.tryDefaultValue()) { return true; } // No value available. @@ -175,7 +175,7 @@ public class MergedParameterization implements Parameterization { return ClassGenericsUtil.tryInstantiate(r, c, this); } catch(Exception e) { - reportError(new InternalParameterizationErrors("Error instantiating internal class: "+c.getName(), e)); + reportError(new InternalParameterizationErrors("Error instantiating internal class: " + c.getName(), e)); return null; } } @@ -186,7 +186,7 @@ public class MergedParameterization implements Parameterization { return ClassGenericsUtil.tryInstantiate(c, c, this); } catch(Exception e) { - reportError(new InternalParameterizationErrors("Error instantiating internal class: "+c.getName(), e)); + reportError(new InternalParameterizationErrors("Error instantiating internal class: " + c.getName(), e)); return null; } } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java index f165942e..29c22e27 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java @@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * @apiviz.uses ParameterException * * @author Erich Schubert + * @since 0.3 */ public interface Parameterization { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java index b5ba3e58..2837983d 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java @@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * When building parameter lists, use {@link ListParameterization} where possible. * * @author Erich Schubert + * @since 0.3 */ public class SerializedParameterization extends AbstractParameterization { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java index 5429ea8b..4b8ea073 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java @@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * All actual Parameterization operations are forwarded to the inner class. * * @author Erich Schubert + * @since 0.3 * * @apiviz.composedOf TrackedParameter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java index caa87440..e039f492 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java @@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * Class containing an object, and the associated value. * * @author Erich Schubert + * @since 0.3 */ public class TrackedParameter { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java index a1d58676..ea48655c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java @@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * in a non-recursive way. * * @author Erich Schubert + * @since 0.3 */ public class UnParameterization implements Parameterization { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/AbstractParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/AbstractParameter.java index d78d0dcc..17d17c6d 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/AbstractParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/AbstractParameter.java @@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterConstra * * @author Steffi Wanka * @author Erich Schubert + * @since 0.3 * * @apiviz.composedOf OptionID * @apiviz.uses ParameterConstraint diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassListParameter.java index d9d1a3a2..b0ce1bc7 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassListParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassListParameter.java @@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz * * @author Steffi Wanka * @author Erich Schubert + * @since 0.3 * * @apiviz.uses ELKIServiceRegistry * @@ -96,6 +97,23 @@ public class ClassListParameter<C> extends ListParameter<ClassListParameter<C>, return buf.toString(); } + @Override + public String getDefaultValueAsString() { + StringBuilder buf = new StringBuilder(); + final String defPackage = restrictionClass.getPackage().getName() + "."; + for(Class<? extends C> c : getDefaultValue()) { + if(buf.length() > 0) { + buf.append(LIST_SEP); + } + String name = c.getName(); + if(name.startsWith(defPackage)) { + name = name.substring(defPackage.length()); + } + buf.append(name); + } + return buf.toString(); + } + @SuppressWarnings("unchecked") @Override protected List<Class<? extends C>> parseValue(Object obj) throws ParameterException { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassParameter.java index 6f562838..39e0daae 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassParameter.java @@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz * * @author Steffi Wanka * @author Erich Schubert + * @since 0.2 * * @apiviz.uses ELKIServiceRegistry * diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/VectorListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleArrayListParameter.java index b6d999fb..696adbff 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/VectorListParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleArrayListParameter.java @@ -3,7 +3,7 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2015 + Copyright (C) 2016 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -23,12 +23,11 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters; */ import java.util.ArrayList; +import java.util.Arrays; import java.util.Iterator; import java.util.List; -import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector; import de.lmu.ifi.dbs.elki.utilities.FormatUtil; -import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.DoubleArray; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException; @@ -39,8 +38,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterConstra * * @author Steffi Wanka * @author Erich Schubert + * @since 0.3 */ -public class VectorListParameter extends ListParameter<VectorListParameter, List<Vector>> { +public class DoubleArrayListParameter extends ListParameter<DoubleArrayListParameter, List<double[]>> { /** * Constructs a vector list parameter with the given name and description. * @@ -48,7 +48,7 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List * @param constraint Constraint * @param defaultValue Default value */ - public VectorListParameter(OptionID optionID, ParameterConstraint<List<Vector>> constraint, List<Vector> defaultValue) { + public DoubleArrayListParameter(OptionID optionID, ParameterConstraint<List<double[]>> constraint, List<double[]> defaultValue) { super(optionID, defaultValue); addConstraint(constraint); } @@ -60,7 +60,7 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List * @param constraint Constraint * @param optional Optional flag */ - public VectorListParameter(OptionID optionID, ParameterConstraint<List<Vector>> constraint, boolean optional) { + public DoubleArrayListParameter(OptionID optionID, ParameterConstraint<List<double[]>> constraint, boolean optional) { super(optionID, optional); addConstraint(constraint); } @@ -71,7 +71,7 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List * @param optionID Option ID * @param constraint Constraint */ - public VectorListParameter(OptionID optionID, ParameterConstraint<List<Vector>> constraint) { + public DoubleArrayListParameter(OptionID optionID, ParameterConstraint<List<double[]>> constraint) { super(optionID); addConstraint(constraint); } @@ -82,11 +82,9 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List * @param optionID Option ID * @param defaultValue Default value */ - // Indiscernible from optionID, constraints - /* - * public VectorListParameter(OptionID optionID, List<Vector> defaultValue) { - * super(optionID, defaultValue); } - */ + public DoubleArrayListParameter(OptionID optionID, List<double[]> defaultValue) { + super(optionID, defaultValue); + } /** * Constructs a vector list parameter with the given name and description. @@ -94,7 +92,7 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List * @param optionID Option ID * @param optional Optional flag */ - public VectorListParameter(OptionID optionID, boolean optional) { + public DoubleArrayListParameter(OptionID optionID, boolean optional) { super(optionID, optional); } @@ -103,17 +101,17 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List * * @param optionID Option ID */ - public VectorListParameter(OptionID optionID) { + public DoubleArrayListParameter(OptionID optionID) { super(optionID); } @Override public String getValueAsString() { StringBuilder buf = new StringBuilder(); - List<Vector> val = getValue(); - Iterator<Vector> valiter = val.iterator(); + List<double[]> val = getValue(); + Iterator<double[]> valiter = val.iterator(); while(valiter.hasNext()) { - buf.append(FormatUtil.format(valiter.next().getArrayRef(), LIST_SEP)); + buf.append(FormatUtil.format(valiter.next(), LIST_SEP)); // Append separation character if(valiter.hasNext()) { buf.append(VECTOR_SEP); @@ -122,47 +120,47 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List return buf.toString(); } - @SuppressWarnings("unchecked") @Override - protected List<Vector> parseValue(Object obj) throws ParameterException { - try { - List<?> l = List.class.cast(obj); - // do extra validation: - for(Object o : l) { - List<?> v = List.class.cast(o); - for(Object c : v) { - if(!(c instanceof Double)) { - throw new WrongParameterValueException("Wrong parameter format for parameter \"" + getName() + "\". Given list contains objects of different type!"); - } - } + public String getDefaultValueAsString() { + StringBuilder buf = new StringBuilder(); + List<double[]> val = getDefaultValue(); + Iterator<double[]> valiter = val.iterator(); + while(valiter.hasNext()) { + buf.append(FormatUtil.format(valiter.next(), LIST_SEP)); + // Append separation character + if(valiter.hasNext()) { + buf.append(VECTOR_SEP); } - // TODO: can we use reflection to get extra checks? - // TODO: Should we copy the list and vectors? - return (List<Vector>) l; - } - catch(ClassCastException e) { - // continue with other attempts. } + return buf.toString(); + } + + @Override + protected List<double[]> parseValue(Object obj) throws ParameterException { if(obj instanceof String) { String[] vectors = VECTOR_SPLIT.split((String) obj); if(vectors.length == 0) { throw new WrongParameterValueException("Wrong parameter format! Given list of vectors for parameter \"" + getName() + "\" is empty!"); } - ArrayList<Vector> vecs = new ArrayList<>(); + ArrayList<double[]> vecs = new ArrayList<>(); - DoubleArray vectorCoord = new DoubleArray(); + double[] buf = new double[11]; + int used = 0; for(String vector : vectors) { - vectorCoord.clear(); + used = 0; String[] coordinates = SPLIT.split(vector); for(String coordinate : coordinates) { try { - vectorCoord.add(FormatUtil.parseDouble(coordinate)); + if(used == buf.length) { + buf = Arrays.copyOf(buf, buf.length << 1); + } + buf[used++] = FormatUtil.parseDouble(coordinate); } catch(NumberFormatException e) { throw new WrongParameterValueException("Wrong parameter format! Coordinates of vector \"" + vector + "\" are not valid!"); } } - vecs.add(new Vector(vectorCoord.toArray())); + vecs.add(Arrays.copyOf(buf, used)); } return vecs; } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleListParameter.java index 074bb0ed..a9fe5471 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleListParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleListParameter.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * * @author Steffi Wanka * @author Erich Schubert + * @since 0.3 */ public class DoubleListParameter extends ListParameter<DoubleListParameter, double[]> { /** @@ -60,6 +61,11 @@ public class DoubleListParameter extends ListParameter<DoubleListParameter, doub } @Override + public String getDefaultValueAsString() { + return FormatUtil.format(getDefaultValue(), LIST_SEP); + } + + @Override protected double[] parseValue(Object obj) throws ParameterException { if(obj instanceof double[]) { return double[].class.cast(obj); diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleParameter.java index a28f8d38..ef7d4a88 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleParameter.java @@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * * @author Steffi Wanka * @author Erich Schubert + * @since 0.2 */ public class DoubleParameter extends NumberParameter<DoubleParameter, Double> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/EnumParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/EnumParameter.java index 0cad6e11..d1fafa79 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/EnumParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/EnumParameter.java @@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * </p> * * @author Florian Nuecke + * @since 0.4.0 * * @param <E> Enum type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileListParameter.java index e5f1b021..cc6d885f 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileListParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileListParameter.java @@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * * @author Steffi Wanka * @author Erich Schubert + * @since 0.3 */ public class FileListParameter extends ListParameter<FileListParameter, List<File>> { /** @@ -89,6 +90,20 @@ public class FileListParameter extends ListParameter<FileListParameter, List<Fil return buf.toString(); } + @Override + public String getDefaultValueAsString() { + StringBuilder buf = new StringBuilder(); + List<File> val = getDefaultValue(); + Iterator<File> veciter = val.iterator(); + while(veciter.hasNext()) { + buf.append(veciter.next()); + if (veciter.hasNext()) { + buf.append(LIST_SEP); + } + } + return buf.toString(); + } + @SuppressWarnings("unchecked") @Override protected List<File> parseValue(Object obj) throws ParameterException { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileParameter.java index 0e865f2d..9571a018 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileParameter.java @@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * * @author Steffi Wanka * @author Erich Schubert + * @since 0.3 */ // TODO: turn FileType into a Constraint? public class FileParameter extends AbstractParameter<FileParameter, File> { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Flag.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Flag.java index 8d83ed2c..d1e29eb7 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Flag.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Flag.java @@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * * @author Steffi Wanka * @author Erich Schubert + * @since 0.3 */ public class Flag extends AbstractParameter<Flag, Boolean> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntListParameter.java index 756dbb90..59bfb3a5 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntListParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntListParameter.java @@ -23,7 +23,6 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import de.lmu.ifi.dbs.elki.utilities.BitsUtil; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException; @@ -33,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * * @author Elke Achtert * @author Erich Schubert + * @since 0.2 */ public class IntListParameter extends ListParameter<IntListParameter, int[]> { /** @@ -70,6 +70,21 @@ public class IntListParameter extends ListParameter<IntListParameter, int[]> { } @Override + public String getDefaultValueAsString() { + int[] val = getDefaultValue(); + if(val.length == 0) { + return ""; + } + StringBuilder buf = new StringBuilder(); + buf.append(val[0]); + for(int i = 1; i < val.length; i++) { + buf.append(LIST_SEP); + buf.append(val[i]); + } + return buf.toString(); + } + + @Override protected int[] parseValue(Object obj) throws ParameterException { if(obj instanceof int[]) { return (int[]) obj; @@ -95,7 +110,7 @@ public class IntListParameter extends ListParameter<IntListParameter, int[]> { /** * Returns a string representation of the parameter's type. - * + * * @return "<int_1,...,int_n>" */ @Override @@ -105,7 +120,9 @@ public class IntListParameter extends ListParameter<IntListParameter, int[]> { /** * Get the values as a bitmask. - * + * + * See also: {@link de.lmu.ifi.dbs.elki.utilities.BitsUtil} + * * @return Bitmask */ public long[] getValueAsBitSet() { @@ -114,9 +131,9 @@ public class IntListParameter extends ListParameter<IntListParameter, int[]> { for(int d : value) { maxd = (d > maxd) ? d : maxd; } - long[] dimensions = BitsUtil.zero(maxd); + long[] dimensions = new long[(maxd >>> 6) + 1]; for(int d : value) { - BitsUtil.setI(dimensions, d); + dimensions[d >>> 6] |= 1L << (d & 0x3F); } return dimensions; } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntParameter.java index d6adf273..9ed15e95 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntParameter.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * * @author Steffi Wanka * @author Erich Schubert + * @since 0.3 */ public class IntParameter extends NumberParameter<IntParameter, Integer> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ListParameter.java index 097475fb..82c4a46d 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ListParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ListParameter.java @@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; * * @author Steffi Wanka * @author Erich Schubert + * @since 0.2 * * @param <THIS> Type self-reference * @param <T> List type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/LongParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/LongParameter.java index 11aff3cb..f44f759d 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/LongParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/LongParameter.java @@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * * @author Steffi Wanka * @author Erich Schubert + * @since 0.2 */ public class LongParameter extends NumberParameter<LongParameter, Long> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/NumberParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/NumberParameter.java index c71db779..bb5c6864 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/NumberParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/NumberParameter.java @@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; * * @author Steffi Wanka * @author Erich Schubert + * @since 0.2 * * @param <THIS> type self-reference * @param <T> the type of a possible value (i.e., the type of the option) diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectListParameter.java index baaa2765..d31c4117 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectListParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectListParameter.java @@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz * Parameter that represents a list of objects (in contrast to a class list parameter, they will be instanced at most once.) * * @author Erich Schubert + * @since 0.3 * * @param <C> Class type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectParameter.java index 40d5b49a..aa0e4a17 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectParameter.java @@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz * * @author Steffi Wanka * @author Erich Schubert + * @since 0.3 * @param <C> Class type */ public class ObjectParameter<C> extends ClassParameter<C> { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Parameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Parameter.java index 9c2d7ea8..99751076 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Parameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Parameter.java @@ -1,10 +1,5 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.UnspecifiedParameterException; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterConstraint; - /* This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures @@ -28,6 +23,11 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterConstra along with this program. If not, see <http://www.gnu.org/licenses/>. */ +import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.UnspecifiedParameterException; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterConstraint; + /** * Interface for the parameter of a class. * @@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterConstra * * @author Steffi Wanka * @author Erich Schubert + * @since 0.3 * * @apiviz.composedOf OptionID * @apiviz.uses ParameterConstraint diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/PatternParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/PatternParameter.java index 3c010db6..f2160d53 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/PatternParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/PatternParameter.java @@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * * @author Steffi Wanka * @author Erich Schubert + * @since 0.3 */ public class PatternParameter extends AbstractParameter<PatternParameter, Pattern> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/RandomParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/RandomParameter.java index 0d5f3741..5e7d6c66 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/RandomParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/RandomParameter.java @@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * Parameter for random generators and/or random seeds. * * @author Erich Schubert + * @since 0.5.5 */ public class RandomParameter extends AbstractParameter<RandomParameter, RandomFactory> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/StringParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/StringParameter.java index 0f06beef..7882c9ee 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/StringParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/StringParameter.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException * * @author Steffi Wanka * @author Erich Schubert + * @since 0.3 */ public class StringParameter extends AbstractParameter<StringParameter, String> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleDoublePair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleDoublePair.java index af10137b..bdfd2b1c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleDoublePair.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleDoublePair.java @@ -29,6 +29,7 @@ import java.util.Comparator; * Pair storing two doubles. * * @author Erich Schubert + * @since 0.2 * * @apiviz.has Comparator */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleIntPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleIntPair.java index 08d0fadd..8f8481b0 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleIntPair.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleIntPair.java @@ -29,6 +29,7 @@ import java.util.Comparator; * Pair storing an integer and a double. * * @author Erich Schubert + * @since 0.2 * * @apiviz.has Comparator */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleObjPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleObjPair.java index 5fdd005e..ccbc38d0 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleObjPair.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleObjPair.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.pairs; * Pair storing a native double value and an arbitrary object. * * @author Erich Schubert + * @since 0.4.0 * * @param <O> Object type */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntDoublePair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntDoublePair.java index 2b8fd6cf..61993a15 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntDoublePair.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntDoublePair.java @@ -29,6 +29,7 @@ import java.util.Comparator; * Pair storing an integer and a double. * * @author Erich Schubert + * @since 0.2 * * @apiviz.has Comparator */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntIntPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntIntPair.java index e7fd6db8..10a458d0 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntIntPair.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntIntPair.java @@ -29,6 +29,7 @@ import java.util.Comparator; * Pair storing two integers. * * @author Erich Schubert + * @since 0.2 * * @apiviz.has Comparator */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/Pair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/Pair.java index 28f7fdaa..40b049f2 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/Pair.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/Pair.java @@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil; * meaningful field names and comparators. * * @author Erich Schubert + * @since 0.2 * * @param <FIRST> first type * @param <SECOND> second type diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/AxisBasedReferencePoints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/AxisBasedReferencePoints.java index 026cf048..337197a3 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/AxisBasedReferencePoints.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/AxisBasedReferencePoints.java @@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * surrounding cube. * * @author Erich Schubert + * @since 0.3 */ public class AxisBasedReferencePoints implements ReferencePointsHeuristic { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/FullDatabaseReferencePoints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/FullDatabaseReferencePoints.java index aed7845f..9e4b9c8f 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/FullDatabaseReferencePoints.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/FullDatabaseReferencePoints.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.relation.RelationUtil; * Strategy to use the complete database as reference points. * * @author Erich Schubert + * @since 0.3 */ public class FullDatabaseReferencePoints implements ReferencePointsHeuristic { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/GridBasedReferencePoints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/GridBasedReferencePoints.java index 1d614bff..45e3c66b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/GridBasedReferencePoints.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/GridBasedReferencePoints.java @@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter; * Grid-based strategy to pick reference points. * * @author Erich Schubert + * @since 0.3 */ public class GridBasedReferencePoints implements ReferencePointsHeuristic { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomGeneratedReferencePoints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomGeneratedReferencePoints.java index 9de4e5e8..9b287443 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomGeneratedReferencePoints.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomGeneratedReferencePoints.java @@ -25,6 +25,7 @@ package de.lmu.ifi.dbs.elki.utilities.referencepoints; import java.util.ArrayList; import java.util.Collection; +import java.util.Random; import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.database.relation.Relation; @@ -41,8 +42,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter; /** * Reference points generated randomly within the used data space. - * + * * @author Erich Schubert + * @since 0.3 */ public class RandomGeneratedReferencePoints implements ReferencePointsHeuristic { /** @@ -62,7 +64,7 @@ public class RandomGeneratedReferencePoints implements ReferencePointsHeuristic /** * Constructor. - * + * * @param samplesize Size of desired sample set * @param scale Scaling factor * @param rnd Random generator @@ -86,14 +88,14 @@ public class RandomGeneratedReferencePoints implements ReferencePointsHeuristic mean[d] -= delta[d] * .5; } + Random rand = rnd.getSingleThreadedRandom(); ArrayList<Vector> result = new ArrayList<>(samplesize); double[] vec = new double[dim]; for(int i = 0; i < samplesize; i++) { for(int d = 0; d < dim; d++) { - vec[d] = mean[d] + (Math.random() - 0.5) * scale * delta[d]; + vec[d] = mean[d] + (rand.nextDouble() - 0.5) * scale * delta[d]; } Vector newp = new Vector(vec); - // logger.debug("New reference point: " + FormatUtil.format(vec)); result.add(newp); } @@ -102,9 +104,9 @@ public class RandomGeneratedReferencePoints implements ReferencePointsHeuristic /** * Parameterization class. - * + * * @author Erich Schubert - * + * * @apiviz.exclude */ public static class Parameterizer extends AbstractParameterizer { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomSampleReferencePoints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomSampleReferencePoints.java index a8b17234..14d91a55 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomSampleReferencePoints.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomSampleReferencePoints.java @@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter; * Random-Sampling strategy for picking reference points. * * @author Erich Schubert + * @since 0.3 */ public class RandomSampleReferencePoints implements ReferencePointsHeuristic { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/ReferencePointsHeuristic.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/ReferencePointsHeuristic.java index 2b417d84..00cef7dc 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/ReferencePointsHeuristic.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/ReferencePointsHeuristic.java @@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation; * Simple Interface for an heuristic to pick reference points. * * @author Erich Schubert + * @since 0.3 */ public interface ReferencePointsHeuristic { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java index f1e1c1fb..2b35108b 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java @@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag; * Star-based strategy to pick reference points. * * @author Erich Schubert + * @since 0.3 */ public class StarBasedReferencePoints implements ReferencePointsHeuristic { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ClipScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ClipScaling.java index 3917c550..74558293 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ClipScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ClipScaling.java @@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * maximum. * * @author Erich Schubert + * @since 0.3 */ public class ClipScaling implements StaticScalingFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/GammaScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/GammaScaling.java index 36fc8eed..7efc5318 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/GammaScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/GammaScaling.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * * @author Erich Schubert * @author Remigius Wojdanowski + * @since 0.3 */ public class GammaScaling implements StaticScalingFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/IdentityScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/IdentityScaling.java index c66a2c7d..46832321 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/IdentityScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/IdentityScaling.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling; * The trivial "identity" scaling function. * * @author Erich Schubert + * @since 0.3 */ public class IdentityScaling implements StaticScalingFunction { @Override diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/LinearScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/LinearScaling.java index de0b5c02..4a65a49a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/LinearScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/LinearScaling.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.math.DoubleMinMax; * Simple linear scaling function. * * @author Erich Schubert + * @since 0.3 */ public class LinearScaling implements StaticScalingFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/MinusLogScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/MinusLogScaling.java index 2c79d8bf..0c8262b0 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/MinusLogScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/MinusLogScaling.java @@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling; * Scaling function to invert values by computing -1 * Math.log(x) * * @author Erich Schubert + * @since 0.3 */ public class MinusLogScaling implements StaticScalingFunction { @Override diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ScalingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ScalingFunction.java index fce71ffc..9928dcc1 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ScalingFunction.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ScalingFunction.java @@ -36,6 +36,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling; * {@code prepare} statement. * * @author Erich Schubert + * @since 0.3 */ public interface ScalingFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/StaticScalingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/StaticScalingFunction.java index 72f8c6a7..34c44b88 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/StaticScalingFunction.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/StaticScalingFunction.java @@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling; * But will always map x to the same f(x) (given the same parameters). * * @author Erich Schubert + * @since 0.3 * */ public interface StaticScalingFunction extends ScalingFunction { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/COPOutlierScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/COPOutlierScaling.java index 122e93b2..ea4dc752 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/COPOutlierScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/COPOutlierScaling.java @@ -58,6 +58,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * </p> * * @author Erich Schubert + * @since 0.6.0 */ @Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", title = "Interpreting and Unifying Outlier Scores", booktitle = "Proc. 11th SIAM International Conference on Data Mining (SDM), Mesa, AZ, 2011", url = "http://siam.omnibooksonline.com/2011datamining/data/papers/018.pdf") public class COPOutlierScaling implements OutlierScalingFunction { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java index 2e778500..be9012a8 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java @@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * Normalization used by HeDES * * @author Erich Schubert + * @since 0.4.0 */ @Reference(authors = "H. V. Nguyen, H. H. Ang, V. Gopalkrishnan", title = "Mining Outliers with Ensemble of Heterogeneous Detectors on Random Subspaces", booktitle = "Proc. 15th International Conference on Database Systems for Advanced Applications (DASFAA 2010)", url = "http://dx.doi.org/10.1007/978-3-642-12026-8_29") public class HeDESNormalizationOutlierScaling implements OutlierScalingFunction { diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/LogRankingPseudoOutlierScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/LogRankingPseudoOutlierScaling.java index a2533119..ab63eabd 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/LogRankingPseudoOutlierScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/LogRankingPseudoOutlierScaling.java @@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException; * a normal distribution. * * @author Erich Schubert + * @since 0.4.0 */ public class LogRankingPseudoOutlierScaling implements OutlierScalingFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java index 00c2a9f0..002ff917 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java @@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; * </p> * * @author Erich Schubert + * @since 0.3 */ @Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", // title = "Interpreting and Unifying Outlier Scores", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java index 2c01b2a1..b6645231 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java @@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * </p> * * @author Erich Schubert + * @since 0.3 */ @Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", // title = "Interpreting and Unifying Outlier Scores", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java index 0271f3f3..dd915b7a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java @@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * </p> * * @author Erich Schubert + * @since 0.4.0 */ @Reference(authors = "J. Gao, P.-N. Tan", // title = "Converting Output Scores from Outlier Detection Algorithms into Probability Estimates", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java index adaf0659..c566d373 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java @@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * </p> * * @author Erich Schubert + * @since 0.3 */ @Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", // title = "Interpreting and Unifying Outlier Scores", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java index 0ac8f6fe..732a54f3 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java @@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag; * </p> * * @author Erich Schubert + * @since 0.3 */ @Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", // title = "Interpreting and Unifying Outlier Scores", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java index d7feb2b4..34480521 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java @@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * maximum values. * * @author Erich Schubert + * @since 0.3 */ public class OutlierLinearScaling implements OutlierScalingFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java index 4ccbe77d..c3f7697e 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java @@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * </p> * * @author Erich Schubert + * @since 0.3 */ @Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", // title = "Interpreting and Unifying Outlier Scores", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierScalingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierScalingFunction.java index 6e05d7c6..e6ae2491 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierScalingFunction.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierScalingFunction.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.scaling.ScalingFunction; * scaling function. * * @author Erich Schubert + * @since 0.3 */ public interface OutlierScalingFunction extends ScalingFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java index 8da3bd35..4339e2aa 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java @@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * mapping onto 0:1 using the minimum values seen. * * @author Erich Schubert + * @since 0.3 */ public class OutlierSqrtScaling implements OutlierScalingFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java index 75a532f7..0b12b0c7 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java @@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException; * a normal distribution. * * @author Erich Schubert + * @since 0.4.0 */ public class RankingPseudoOutlierScaling implements OutlierScalingFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java index 748fddd4..6855d879 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java @@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; * </p> * * @author Erich Schubert + * @since 0.4.0 */ @Reference(authors = "J. Gao, P.-N. Tan", // title = "Converting Output Scores from Outlier Detection Algorithms into Probability Estimates", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java index 1387d69f..0fe9e86a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java @@ -57,6 +57,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * </p> * * @author Erich Schubert + * @since 0.3 */ @Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", // title = "Interpreting and Unifying Outlier Scores", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java index b6ef5e3a..524c93f6 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java @@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter; * </p> * * @author Erich Schubert + * @since 0.3 */ @Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", // title = "Interpreting and Unifying Outlier Scores", // diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java index 7ac19a1b..1f867e4a 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java @@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter; * Outlier scaling function that only keeps the top k outliers. * * @author Erich Schubert + * @since 0.3 */ public class TopKOutlierScaling implements OutlierScalingFunction { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/DOMCloner.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/DOMCloner.java index 85f81561..6fecd67c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/DOMCloner.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/DOMCloner.java @@ -33,6 +33,7 @@ import org.w3c.dom.Node; * Class for cloning XML document, with filter capabilites * * @author Erich Schubert + * @since 0.5.0 */ public class DOMCloner { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/HTMLUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/HTMLUtil.java index 4522df6f..376f00cb 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/HTMLUtil.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/HTMLUtil.java @@ -40,6 +40,7 @@ import org.w3c.dom.Element; * Class with HTML related utility functions, in particular HTML generation. * * @author Erich Schubert + * @since 0.2 */ public final class HTMLUtil { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeIterator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeIterator.java index 10b14c8b..af272678 100755 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeIterator.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeIterator.java @@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.ExceptionMessages; * Simple adapter class to iterate over a DOM tree nodes children. * * @author Erich Schubert + * @since 0.2 */ public final class XMLNodeIterator implements Iterator<Node> { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeListIterator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeListIterator.java index 7566ccb4..f1ada456 100755 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeListIterator.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeListIterator.java @@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.ExceptionMessages; * Simple adapter class to iterate over a DOM tree nodes children. * * @author Erich Schubert + * @since 0.2 */ public final class XMLNodeListIterator implements Iterator<Node> { /** |