changeset 3013:ba62c1751f07

FixA: Added new serializable km inedx structure. flys-artifacts/trunk@4578 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 05 Jun 2012 09:04:01 +0000
parents 0330bff1b382
children e341606faeb4
files flys-artifacts/ChangeLog flys-artifacts/src/main/java/de/intevation/flys/utils/KMIndex.java
diffstat 2 files changed, 93 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/flys-artifacts/ChangeLog	Tue Jun 05 08:51:46 2012 +0000
+++ b/flys-artifacts/ChangeLog	Tue Jun 05 09:04:01 2012 +0000
@@ -1,3 +1,9 @@
+2012-06-05	Sascha L. Teichmann	<sascha.teichmann@intevation.de>
+
+	* src/main/java/de/intevation/flys/utils/KMIndex.java: New.
+	  Serializable index structure to find objects by there km.
+	  TODO: Use in fixings analysis.
+
 2012-06-05	Sascha L. Teichmann	<sascha.teichmann@intevation.de>
 
 	* src/main/java/de/intevation/flys/utils/EpsilonComparator.java:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/utils/KMIndex.java	Tue Jun 05 09:04:01 2012 +0000
@@ -0,0 +1,87 @@
+package de.intevation.flys.utils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import java.io.Serializable;
+
+public class KMIndex<A>
+implements   Serializable
+{
+    public static final double EPSILON = 1e-4;
+
+    public static class Entry<A>
+    implements          Serializable, Comparable<Entry<A>>
+    {
+        protected double km;
+        protected A      value;
+
+        public Entry(double km) {
+            this.km = km;
+        }
+
+        public Entry(double km, A value) {
+            this.km    = km;
+            this.value = value;
+        }
+
+        public double getKm() {
+            return km;
+        }
+
+        public A getValue() {
+            return value;
+        }
+
+        public void setValue(A value) {
+            this.value = value;
+        }
+
+        @Override
+        public int compareTo(Entry<A> other) {
+            double diff = km - other.km;
+            if (diff < -EPSILON) return -1;
+            if (diff > +EPSILON) return +1;
+            return 0;
+        }
+
+        public boolean epsilonEquals(double km) {
+            return Math.abs(this.km - km) < EPSILON;
+        }
+    } // class Entry
+
+
+    protected List<Entry<A>> entries;
+
+    public KMIndex() {
+        this(10);
+    }
+
+    public KMIndex(int capacity) {
+        entries = new ArrayList<Entry<A>>(capacity);
+    }
+
+    public void add(double km, A value) {
+        entries.add(new Entry(km, value));
+    }
+
+    public void sort() {
+        Collections.sort(entries);
+    }
+
+    public Entry<A> search(double km) {
+        for (Entry<A> entry: entries) {
+            if (entry.epsilonEquals(km)) {
+                return entry;
+            }
+        }
+        return null;
+    }
+
+    public Entry<A> binarySearch(double km) {
+        int index = Collections.binarySearch(entries, new Entry(km));
+        return index >= 0 ? entries.get(index) : null;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org