Skip to content

Commit e296ad8

Browse files
minnerbetpietzsch
authored andcommitted
Decouple creation logic of positions and values
1 parent 3a969d8 commit e296ad8

File tree

2 files changed

+23
-75
lines changed

2 files changed

+23
-75
lines changed

src/main/java/net/imglib2/kdtree/KDTreeData.java

Lines changed: 19 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package net.imglib2.kdtree;
22

3-
import java.util.List;
43
import java.util.function.IntFunction;
54
import java.util.function.Supplier;
65
import net.imglib2.RandomAccessibleInterval;
@@ -38,59 +37,15 @@ public class KDTreeData< T >
3837

3938
private volatile RealInterval boundingBox;
4039

41-
public KDTreeData( double[][] positions, List< T > values )
42-
{
43-
numPoints = values.size();
44-
numDimensions = positions.length;
45-
this.positions = new KDTreePositions.Nested(positions);
46-
this.values = new KDTreeValues.ListValues<>(values);
47-
}
48-
49-
public KDTreeData( double[][] positions, List< T > values, RealInterval boundingBox )
50-
{
51-
this( positions, values );
52-
this.boundingBox = boundingBox;
53-
}
54-
55-
public KDTreeData( double[][] positions, RandomAccessibleInterval< T > values )
56-
{
57-
numPoints = ( int ) values.dimension( 0 );
58-
numDimensions = positions.length;
59-
this.positions = new KDTreePositions.Nested(positions);
60-
this.values = new KDTreeValues.ImgValues<>(values);
61-
}
62-
63-
public KDTreeData( double[][] positions, RandomAccessibleInterval< T > values, RealInterval boundingBox )
64-
{
65-
this( positions, values );
66-
this.boundingBox = boundingBox;
67-
}
68-
69-
public KDTreeData( double[] positions, List< T > values )
70-
{
71-
numPoints = values.size();
72-
numDimensions = positions.length / numPoints;
73-
this.positions = new KDTreePositions.Flat(positions, numDimensions);
74-
this.values = new KDTreeValues.ListValues<>(values);
75-
}
76-
77-
public KDTreeData( double[] positions, List< T > values, RealInterval boundingBox )
78-
{
79-
this( positions, values );
80-
this.boundingBox = boundingBox;
81-
}
82-
83-
public KDTreeData( double[] positions, RandomAccessibleInterval< T > values )
84-
{
85-
numPoints = ( int ) values.dimension( 0 );
86-
numDimensions = positions.length / numPoints;
87-
this.positions = new KDTreePositions.Flat(positions, numDimensions);
88-
this.values = new KDTreeValues.ImgValues<>(values);
40+
public KDTreeData(KDTreePositions positions, KDTreeValues<T> values) {
41+
numPoints = positions.numPoints();
42+
numDimensions = positions.numDimensions();
43+
this.positions = positions;
44+
this.values = values;
8945
}
9046

91-
public KDTreeData( double[] positions, RandomAccessibleInterval< T > values, RealInterval boundingBox )
92-
{
93-
this( positions, values );
47+
public KDTreeData(KDTreePositions positions, KDTreeValues<T> values, RealInterval boundingBox) {
48+
this(positions, values);
9449
this.boundingBox = boundingBox;
9550
}
9651

@@ -100,11 +55,6 @@ public T type()
10055
return values.type();
10156
}
10257

103-
public KDTreePositions positions()
104-
{
105-
return positions;
106-
}
107-
10858
public double[] getFlatPositions() {
10959
return positions.getFlatPositions();
11060
}
@@ -188,23 +138,17 @@ public static < L extends RealLocalizable, T > KDTreeData< T > create(
188138
final int[] tree = KDTreeUtils.makeTree( points );
189139
final int[] invtree = KDTreeUtils.invert( tree );
190140

191-
final boolean useFlatLayout = ( long ) numDimensions * numPoints <= KDTreeUtils.MAX_ARRAY_SIZE;
192-
if ( storeValuesAsNativeImg && KDTreeUtils.getType( values ) instanceof NativeType )
193-
{
194-
@SuppressWarnings( "unchecked" )
195-
final Img< T > treeValues = ( Img< T > ) KDTreeUtils.orderValuesImg( invtree, ( Iterable ) values );
196-
if ( useFlatLayout )
197-
return new KDTreeData<>(KDTreeUtils.reorderToFlatLayout( points, tree ), treeValues);
198-
else
199-
return new KDTreeData<>(KDTreeUtils.reorder( points, tree ), treeValues);
200-
}
201-
else
202-
{
203-
final List< T > treeValues = KDTreeUtils.orderValuesList( invtree, values );
204-
if ( useFlatLayout )
205-
return new KDTreeData<>(KDTreeUtils.reorderToFlatLayout( points, tree ), treeValues);
206-
else
207-
return new KDTreeData<>(KDTreeUtils.reorder( points, tree ), treeValues);
208-
}
141+
final boolean storeAsImg = (storeValuesAsNativeImg && KDTreeUtils.getType(values) instanceof NativeType);
142+
@SuppressWarnings("unchecked")
143+
final KDTreeValues<T> treeValues = (storeAsImg)
144+
? new KDTreeValues.ImgValues<>((Img<T>) KDTreeUtils.orderValuesImg(invtree, (Iterable) values))
145+
: new KDTreeValues.ListValues<>(KDTreeUtils.orderValuesList(invtree, values));
146+
147+
final boolean useFlatLayout = (long) numDimensions * numPoints <= KDTreeUtils.MAX_ARRAY_SIZE;
148+
final KDTreePositions treePositions = (useFlatLayout)
149+
? new KDTreePositions.Flat(KDTreeUtils.reorderToFlatLayout(points, tree), numDimensions)
150+
: new KDTreePositions.Nested(KDTreeUtils.reorder(points, tree));
151+
152+
return new KDTreeData<>(treePositions, treeValues);
209153
}
210154
}

src/main/java/net/imglib2/kdtree/KDTreePositions.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ public int numDimensions() {
135135
return numDimensions;
136136
}
137137

138+
public int numPoints() {
139+
return numPoints;
140+
}
141+
138142
public int size() {
139143
return numPoints;
140144
}

0 commit comments

Comments
 (0)