| 126 | } |
| 127 | |
| 128 | public <T> void build128d(List<T> d, Function<T, float[]> t) { |
| 129 | free(); |
| 130 | |
| 131 | FloatBuffer f = (allocated == null || allocated.capacity() != d.size() * 128) ? ByteBuffer.allocateDirect( |
| 132 | 4 * d.size() * 128) |
| 133 | .order(ByteOrder.nativeOrder()) |
| 134 | .asFloatBuffer() : allocated; |
| 135 | |
| 136 | for (T dd : d) { |
| 137 | float[] v = t.apply(dd); |
| 138 | if (v.length != 128) |
| 139 | throw new IllegalArgumentException(v.length + "!=128"); |
| 140 | f.put(v); |
| 141 | } |
| 142 | f.rewind(); |
| 143 | cloud = build128(f, d.size()); |
| 144 | allocated = f; |
| 145 | is2d = false; |
| 146 | } |
| 147 | |
| 148 | public <T> Flann build2d(List<T> d, Function<T, Vec2> t) { |
| 149 | free(); |