Skip to content

Commit d3d2205

Browse files
gselzerctrueden
authored andcommitted
Add OpRunner -> NullaryComputer support
1 parent 3b028dd commit d3d2205

3 files changed

Lines changed: 38 additions & 0 deletions

File tree

src/main/java/org/scijava/ops/transform/FunctionalToOpRunnerTransformer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import org.scijava.ops.core.computer.Computer3;
4747
import org.scijava.ops.core.computer.Computer4;
4848
import org.scijava.ops.core.computer.Computer5;
49+
import org.scijava.ops.core.computer.NullaryComputer;
4950
import org.scijava.ops.core.function.Function3;
5051
import org.scijava.ops.core.function.Function4;
5152
import org.scijava.ops.core.function.Function5;
@@ -125,6 +126,7 @@ private static boolean isOpRunner(final OpRef targetRef) {
125126
private static OpRunner computerToRunner(final Object src, final Class<?> srcFunctionalRawType)
126127
throws OpTransformationException
127128
{
129+
if (src instanceof NullaryComputer) return OpRunners.Computers.toRunner((NullaryComputer<?>) src);
128130
if (src instanceof Computer) return OpRunners.Computers.toRunner((Computer<?, ?>) src);
129131
if (src instanceof BiComputer) return OpRunners.Computers.toRunner((BiComputer<?, ?, ?>) src);
130132
if (src instanceof Computer3) return OpRunners.Computers.toRunner((Computer3<?, ?, ?, ?>) src);

src/main/java/org/scijava/ops/util/Adapt.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
import org.scijava.ops.core.computer.Computer3;
1818
import org.scijava.ops.core.computer.Computer4;
1919
import org.scijava.ops.core.computer.Computer5;
20+
import org.scijava.ops.core.computer.NullaryComputer;
2021
import org.scijava.ops.core.function.Function3;
2122
import org.scijava.ops.core.function.Function4;
2223
import org.scijava.ops.core.function.Function5;
24+
import org.scijava.ops.core.function.Source;
2325
import org.scijava.ops.core.inplace.BiInplaceFirst;
2426
import org.scijava.ops.core.inplace.BiInplaceSecond;
2527
import org.scijava.ops.core.inplace.Inplace;
@@ -120,6 +122,15 @@ public static <I1, I2, I3, I4, O> BiFunction<I1, I2, O> asBiFunction(
120122
*/
121123
public static class Computers {
122124
private Computers() {}
125+
126+
public static <O> Source<O> asFunction(final NullaryComputer<O> computer,
127+
final Source<O> inputAwareSource) {
128+
return () -> {
129+
O out = inputAwareSource.get();
130+
computer.compute(out);
131+
return out;
132+
};
133+
}
123134

124135
public static <I, O> Function<I, O> asFunction(final Computer<I, O> computer,
125136
final Function<I, O> inputAwareSource) {

src/main/java/org/scijava/ops/util/OpRunners.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@
99
import org.scijava.ops.core.computer.Computer3;
1010
import org.scijava.ops.core.computer.Computer4;
1111
import org.scijava.ops.core.computer.Computer5;
12+
import org.scijava.ops.core.computer.NullaryComputer;
1213
import org.scijava.ops.core.function.Function3;
1314
import org.scijava.ops.core.function.Function4;
1415
import org.scijava.ops.core.function.Function5;
1516
import org.scijava.ops.core.function.Function6;
17+
import org.scijava.ops.core.function.Source;
1618
import org.scijava.ops.core.inplace.BiInplaceFirst;
1719
import org.scijava.ops.core.inplace.BiInplaceSecond;
1820
import org.scijava.ops.core.inplace.Inplace;
@@ -205,6 +207,29 @@ public O run(Object[] args) {
205207
}
206208

207209
public static class Computers {
210+
public static <O> OpRunner toRunner(NullaryComputer<O> computer) {
211+
return new OpRunner() {
212+
213+
@Override
214+
public Object getAdaptedOp() {
215+
return computer;
216+
}
217+
218+
@Override
219+
public Nil<?>[] inTypes() {
220+
return new Nil<?>[] {};
221+
}
222+
223+
@SuppressWarnings("unchecked")
224+
@Override
225+
public O run(Object[] args) {
226+
Source<O> source = () -> (O) args[0];
227+
return Adapt.Computers.asFunction(computer, source).get();
228+
}
229+
230+
};
231+
}
232+
208233
public static <I, O> OpRunner toRunner(Computer<I, O> computer) {
209234
return new OpRunner() {
210235

0 commit comments

Comments
 (0)