Mercurial > dive4elements > river
comparison 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 |
comparison
equal
deleted
inserted
replaced
3026:65b6e27c6f25 | 3027:52aac4941d2a |
---|---|
114 values[i] = index >= 0 && index < columns.length | 114 values[i] = index >= 0 && index < columns.length |
115 ? columns[index].getQuick(row) | 115 ? columns[index].getQuick(row) |
116 : Double.NaN; | 116 : Double.NaN; |
117 } | 117 } |
118 } | 118 } |
119 | |
120 public int binarySearch(String columnName, double value) { | |
121 return binarySearch(columnIndex(columnName), value); | |
122 } | |
123 | |
124 public int binarySearch(int columnIndex, double value) { | |
125 TDoubleArrayList column = columns[columnIndex]; | |
126 return column.binarySearch(value); | |
127 } | |
128 | |
129 public int binarySearch(String columnName, double value, double epsilon) { | |
130 return binarySearch(columnIndex(columnName), value, epsilon); | |
131 } | |
132 | |
133 public int binarySearch(int columnIndex, double value, double epsilon) { | |
134 if (epsilon < 0d) epsilon = -epsilon; | |
135 double vl = value - epsilon; | |
136 double vh = value + epsilon; | |
137 | |
138 TDoubleArrayList column = columns[columnIndex]; | |
139 int lo = 0, hi = column.size()-1; | |
140 while (hi >= lo) { | |
141 int mid = (lo+hi) >> 1; | |
142 double v = column.getQuick(mid); | |
143 if (v < vl) hi = mid - 1; | |
144 else if (v > vh) lo = mid + 1; | |
145 else return mid; | |
146 } | |
147 | |
148 return -1; | |
149 } | |
150 | |
151 public boolean isSorted(String columnName) { | |
152 return isSorted(columnIndex(columnName)); | |
153 } | |
154 | |
155 public boolean isSorted(int columnIndex) { | |
156 TDoubleArrayList column = columns[columnIndex]; | |
157 for (int i = 1, N = column.size(); i < N; ++i) { | |
158 if (column.getQuick(i-1) > column.getQuick(i)) { | |
159 return false; | |
160 } | |
161 } | |
162 return true; | |
163 } | |
119 } | 164 } |
120 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 165 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |