Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Parameters.java @ 3027:52aac4941d2a
FixA: Added binary search methods for parameters.
flys-artifacts/trunk@4596 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 05 Jun 2012 17:17:26 +0000 |
parents | ab81ffd1343e |
children | 0b5a7a2c3724 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Parameters.java Tue Jun 05 16:25:51 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Parameters.java Tue Jun 05 17:17:26 2012 +0000 @@ -116,5 +116,50 @@ : Double.NaN; } } + + public int binarySearch(String columnName, double value) { + return binarySearch(columnIndex(columnName), value); + } + + public int binarySearch(int columnIndex, double value) { + TDoubleArrayList column = columns[columnIndex]; + return column.binarySearch(value); + } + + public int binarySearch(String columnName, double value, double epsilon) { + return binarySearch(columnIndex(columnName), value, epsilon); + } + + public int binarySearch(int columnIndex, double value, double epsilon) { + if (epsilon < 0d) epsilon = -epsilon; + double vl = value - epsilon; + double vh = value + epsilon; + + TDoubleArrayList column = columns[columnIndex]; + int lo = 0, hi = column.size()-1; + while (hi >= lo) { + int mid = (lo+hi) >> 1; + double v = column.getQuick(mid); + if (v < vl) hi = mid - 1; + else if (v > vh) lo = mid + 1; + else return mid; + } + + return -1; + } + + public boolean isSorted(String columnName) { + return isSorted(columnIndex(columnName)); + } + + public boolean isSorted(int columnIndex) { + TDoubleArrayList column = columns[columnIndex]; + for (int i = 1, N = column.size(); i < N; ++i) { + if (column.getQuick(i-1) > column.getQuick(i)) { + return false; + } + } + return true; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :