public void connectFinalOutputTo(Operator outputOperator, int thatInputIndex) { this.connectTo(FINAL_OUTPUT_INDEX, outputOperator, thatInputIndex); }
@Override public Collection<InputSlot<?>> getLoopBodyInputs() { return Collections.singletonList(this.getInput(ITERATION_INPUT_INDEX)); }
@Override public int getNumExpectedIterations() { return this.getNumIterations(); }
/** * Creates a copy of the given {@link RepeatOperator}. * * @param that should be copied */ public RepeatOperator(RepeatOperator<Type> that) { super(that); this.initializeSlots(that.getType()); this.numIterations = that.numIterations; this.state = that.getState(); }
RepeatOperator<Tuple2<Long, long[]>> loopHead = new RepeatOperator<>( pageRankOperator.getNumIterations(), ReflectionUtils.specify(Tuple2.class) ); loopHead.at(epoch); loopHead.setName(String.format("%s (loop head)", operatorBaseName)); loopHead.initialize(initializeRanks, 0); )); adjacencyCreator.connectTo(0, rankJoin, 0); loopHead.connectTo(RepeatOperator.ITERATION_OUTPUT_INDEX, rankJoin, 1); sumPartialRanks.connectTo(0, damping, 0); vertexCounter.broadcastTo(0, damping, "numVertices"); loopHead.endIteration(damping, 0);
private SubplanPattern createSubplanPattern() { final OperatorPattern operatorPattern = new OperatorPattern( "repeat", new RepeatOperator<>(1, DataSetType.none()), false ); return SubplanPattern.createSingleton(operatorPattern); }
private Subplan createLoopOperatorSubplan(RepeatOperator<?> repeatOperator, int epoch) { final int numIterations = repeatOperator.getNumIterations(); incSource.setName(String.format("%s (init)", repeatOperator.getName())); repeatOperator.getType().unchecked(), DataSetType.createDefault(Integer.class), ints -> RheemCollections.getSingle(ints) >= numIterations, numIterations ); loopOperator.setName(repeatOperator.getName()); increment.setName(String.format("%s (inc)", repeatOperator.getName()));
@Override public Collection<OutputSlot<?>> getForwards(InputSlot<?> input) { assert this.isOwnerOf(input); switch (input.getIndex()) { case INITIAL_INPUT_INDEX: case ITERATION_INPUT_INDEX: return Arrays.asList(this.getOutput(ITERATION_OUTPUT_INDEX), this.getOutput(FINAL_OUTPUT_INDEX)); default: return super.getForwards(input); } }
@Override public Collection<OutputSlot<?>> getFinalLoopOutputs() { return Collections.singletonList(this.getOutput(FINAL_OUTPUT_INDEX)); }
private SubplanPattern createPattern() { return SubplanPattern.createSingleton(new OperatorPattern<>( "repeat", new RepeatOperator<>(1, DataSetType.none()), false )); }
@Override public Collection<OutputSlot<?>> getLoopBodyOutputs() { return Collections.singletonList(this.getOutput(ITERATION_OUTPUT_INDEX)); }
private SubplanPattern createSubplanPattern() { final OperatorPattern operatorPattern = new OperatorPattern( "repeat", new RepeatOperator<>(1, DataSetType.none()), false ); return SubplanPattern.createSingleton(operatorPattern); }
@Override public Collection<InputSlot<?>> getLoopInitializationInputs() { return Collections.singletonList(this.getInput(INITIAL_INPUT_INDEX)); }
public void beginIteration(Operator beginOperator, int beginInputIndex) { this.connectTo(ITERATION_OUTPUT_INDEX, beginOperator, beginInputIndex); }
@SuppressWarnings("unchecked") public DataSetType<Type> getType() { return ((InputSlot<Type>) this.getInput(INITIAL_INPUT_INDEX)).getType(); }