Skip to content

Commit 5250dc8

Browse files
authored
Merge pull request #254 from scijava/scijava-ops-engine/broaden-primitive-array-converters
Broaden ObjectArray -> Primitve Array converters
2 parents f19e30e + 7a97158 commit 5250dc8

File tree

2 files changed

+29
-34
lines changed

2 files changed

+29
-34
lines changed

scijava-ops-engine/src/main/java/org/scijava/ops/engine/matcher/convert/PrimitiveArrayConverters.java

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
package org.scijava.ops.engine.matcher.convert;
3131

32+
import java.util.Collection;
3233
import java.util.function.Function;
3334

3435
import org.scijava.collections.ObjectArray;
@@ -128,95 +129,89 @@ public class PrimitiveArrayConverters<N extends Number> implements
128129

129130
@OpHints(hints = { Conversion.FORBIDDEN })
130131
@OpField(names = "engine.convert")
131-
public final Function<ObjectArray<Number>, Byte[]> toByte = o -> o.stream()
132+
public final Function<Collection<Number>, Byte[]> toByte = o -> o.stream()
132133
.map(b -> b == null ? null : b.byteValue()).toArray(Byte[]::new);
133134

134135
@OpHints(hints = { Conversion.FORBIDDEN })
135136
@OpField(names = "engine.convert")
136-
public final Function<ObjectArray<Number>, Integer[]> toInteger = o -> o
137+
public final Function<Collection<Number>, Integer[]> toInteger = o -> o
137138
.stream().map(i -> i == null ? null : i.intValue()).toArray(Integer[]::new);
138139

139140
@OpHints(hints = { Conversion.FORBIDDEN })
140141
@OpField(names = "engine.convert")
141-
public final Function<ObjectArray<Number>, Short[]> toShort = o -> o.stream()
142+
public final Function<Collection<Number>, Short[]> toShort = o -> o.stream()
142143
.map(s -> s == null ? null : s.shortValue()).toArray(Short[]::new);
143144

144145
@OpHints(hints = { Conversion.FORBIDDEN })
145146
@OpField(names = "engine.convert")
146-
public final Function<ObjectArray<Number>, Long[]> toLong = o -> o.stream()
147+
public final Function<Collection<Number>, Long[]> toLong = o -> o.stream()
147148
.map(l -> l == null ? null : l.longValue()).toArray(Long[]::new);
148149

149150
@OpHints(hints = { Conversion.FORBIDDEN })
150151
@OpField(names = "engine.convert")
151-
public final Function<ObjectArray<Number>, Float[]> toFloat = o -> o.stream()
152+
public final Function<Collection<Number>, Float[]> toFloat = o -> o.stream()
152153
.map(f -> f == null ? null : f.floatValue()).toArray(Float[]::new);
153154

154155
@OpHints(hints = { Conversion.FORBIDDEN })
155156
@OpField(names = "engine.convert")
156-
public final Function<ObjectArray<Number>, Double[]> toDouble = o -> o
157+
public final Function<Collection<Number>, Double[]> toDouble = o -> o
157158
.stream().map(d -> d == null ? null : d.doubleValue()).toArray(
158159
Double[]::new);
159160

160161
// -- Primitive Converters -- //
161162

162163
@OpHints(hints = { Conversion.FORBIDDEN })
163164
@OpField(names = "engine.convert")
164-
public final Function<ObjectArray<Number>, byte[]> toPrimitiveByte = o -> {
165+
public final Function<Collection<Number>, byte[]> toPrimitiveByte = o -> {
165166
var arr = new byte[o.size()];
166-
for (var i = 0; i < o.size(); i++) {
167-
arr[i] = o.get(i).byteValue();
168-
}
167+
int i = 0;
168+
for (var num : o) arr[i++] = num.byteValue();
169169
return arr;
170170
};
171171

172172
@OpHints(hints = { Conversion.FORBIDDEN })
173173
@OpField(names = "engine.convert")
174-
public final Function<ObjectArray<Number>, short[]> toPrimitiveShort = o -> {
174+
public final Function<Collection<Number>, short[]> toPrimitiveShort = o -> {
175175
var arr = new short[o.size()];
176-
for (var i = 0; i < o.size(); i++) {
177-
arr[i] = o.get(i).shortValue();
178-
}
176+
int i = 0;
177+
for (var num : o) arr[i++] = num.shortValue();
179178
return arr;
180179
};
181180

182181
@OpHints(hints = { Conversion.FORBIDDEN })
183182
@OpField(names = "engine.convert")
184-
public final Function<ObjectArray<Number>, int[]> toPrimitiveInt = o -> {
183+
public final Function<Collection<Number>, int[]> toPrimitiveInt = o -> {
185184
var arr = new int[o.size()];
186-
for (var i = 0; i < o.size(); i++) {
187-
arr[i] = o.get(i).intValue();
188-
}
185+
int i = 0;
186+
for (var num : o) arr[i++] = num.intValue();
189187
return arr;
190188
};
191189

192190
@OpHints(hints = { Conversion.FORBIDDEN })
193191
@OpField(names = "engine.convert")
194-
public final Function<ObjectArray<Number>, long[]> toPrimitiveLong = o -> {
192+
public final Function<Collection<Number>, long[]> toPrimitiveLong = o -> {
195193
var arr = new long[o.size()];
196-
for (var i = 0; i < o.size(); i++) {
197-
arr[i] = o.get(i).longValue();
198-
}
194+
int i = 0;
195+
for (var num : o) arr[i++] = num.longValue();
199196
return arr;
200197
};
201198

202199
@OpHints(hints = { Conversion.FORBIDDEN })
203200
@OpField(names = "engine.convert")
204-
public final Function<ObjectArray<Number>, float[]> toPrimitiveFloat = o -> {
201+
public final Function<Collection<Number>, float[]> toPrimitiveFloat = o -> {
205202
var arr = new float[o.size()];
206-
for (var i = 0; i < o.size(); i++) {
207-
arr[i] = o.get(i).floatValue();
208-
}
203+
int i = 0;
204+
for (var num : o) arr[i++] = num.floatValue();
209205
return arr;
210206
};
211207

212208
@OpHints(hints = { Conversion.FORBIDDEN })
213209
@OpField(names = "engine.convert")
214-
public final Function<ObjectArray<Number>, double[]> toPrimitiveDouble =
210+
public final Function<Collection<Number>, double[]> toPrimitiveDouble =
215211
o -> {
216212
var arr = new double[o.size()];
217-
for (var i = 0; i < o.size(); i++) {
218-
arr[i] = o.get(i).doubleValue();
219-
}
213+
int i = 0;
214+
for (var num : o) arr[i++] = num.doubleValue();
220215
return arr;
221216
};
222217

scijava-ops-engine/src/test/java/org/scijava/ops/engine/impl/ProvenanceTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,7 @@ public void testReducedOpRecovery() {
558558
* This method returns {@code true} iff:
559559
* <ol>
560560
* <li><b>Both</b> {@code op1} and {@code op2} are {@link RichOp}s</li>
561-
* <li>The backing Op {@link Class}es are equal</li>
561+
* <li>The backing Op {@link InfoTree}s are equal</li>
562562
* </ol>
563563
*
564564
* @param op1 an Op
@@ -569,9 +569,9 @@ private boolean wrappedOpEquality(Object op1, Object op2) {
569569
boolean isRichOp1 = op1 instanceof RichOp;
570570
boolean isRichOp2 = op2 instanceof RichOp;
571571
if (isRichOp1 && isRichOp2) {
572-
var backingCls1 = ((RichOp<?>) op1).op().getClass();
573-
var backingCls2 = ((RichOp<?>) op2).op().getClass();
574-
return backingCls1 == backingCls2;
572+
var backingCls1 = ((RichOp<?>) op1).infoTree();
573+
var backingCls2 = ((RichOp<?>) op2).infoTree();
574+
return backingCls1.equals(backingCls2);
575575
}
576576
return false;
577577
}

0 commit comments

Comments
 (0)