org.optaplanner.constraint.streams.bavet.bi.BavetFlattenLastBridgeBiConstraintStream Maven / Gradle / Ivy
package org.optaplanner.constraint.streams.bavet.bi;
import java.util.Set;
import java.util.function.Function;
import org.optaplanner.constraint.streams.bavet.BavetConstraintFactory;
import org.optaplanner.constraint.streams.bavet.common.AbstractFlattenLastNode;
import org.optaplanner.constraint.streams.bavet.common.BavetAbstractConstraintStream;
import org.optaplanner.constraint.streams.bavet.common.NodeBuildHelper;
import org.optaplanner.core.api.score.Score;
import org.optaplanner.core.api.score.stream.ConstraintStream;
public final class BavetFlattenLastBridgeBiConstraintStream
extends BavetAbstractBiConstraintStream {
private final BavetAbstractBiConstraintStream parent;
private final Function> mappingFunction;
private BavetFlattenLastBiConstraintStream flattenLastStream;
public BavetFlattenLastBridgeBiConstraintStream(BavetConstraintFactory constraintFactory,
BavetAbstractBiConstraintStream parent,
Function> mappingFunction) {
super(constraintFactory, parent.getRetrievalSemantics());
this.parent = parent;
this.mappingFunction = mappingFunction;
}
@Override
public boolean guaranteesDistinct() {
return false;
}
public void setFlattenLastStream(BavetFlattenLastBiConstraintStream flattenLastStream) {
this.flattenLastStream = flattenLastStream;
}
// ************************************************************************
// Node creation
// ************************************************************************
@Override
public void collectActiveConstraintStreams(Set> constraintStreamSet) {
parent.collectActiveConstraintStreams(constraintStreamSet);
constraintStreamSet.add(this);
}
@Override
public ConstraintStream getTupleSource() {
return parent.getTupleSource();
}
@Override
public > void buildNode(NodeBuildHelper buildHelper) {
if (!childStreamList.isEmpty()) {
throw new IllegalStateException("Impossible state: the stream (" + this
+ ") has an non-empty childStreamList (" + childStreamList + ") but it's a flattenLast bridge.");
}
int inputStoreIndex = buildHelper.reserveTupleStoreIndex(parent.getTupleSource());
int outputStoreSize = buildHelper.extractTupleStoreSize(flattenLastStream);
AbstractFlattenLastNode, BiTuple, B, NewB> node = new FlattenLastBiNode<>(
inputStoreIndex, mappingFunction,
buildHelper.getAggregatedTupleLifecycle(flattenLastStream.getChildStreamList()),
outputStoreSize);
buildHelper.addNode(node, this);
}
// ************************************************************************
// Equality for node sharing
// ************************************************************************
// TODO
// ************************************************************************
// Getters/setters
// ************************************************************************
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy