Package ai.timefold.solver.constraint.streams.bavet.common
This package contains performance-sensitive code.
Much of it is directly on the hot path of the solver.
It contains various micro-optimizations, the benefits of which have been confirmed by extensive benchmarking.
When it comes to this code, assumptions and pre-conceived notions of JVM performance should not be trusted.
Instead, any likely performance-altering modifications to this code should be carefully benchmarked.
-
Interface Summary Interface Description BavetIfExistsConstraintStream<Solution_> BavetJoinConstraintStream<Solution_> BavetScoringConstraintStream<Solution_> GroupNodeConstructor<Tuple_ extends AbstractTuple> GroupNodeConstructor.NodeConstructorWithAccumulate<Tuple_ extends AbstractTuple> GroupNodeConstructor.NodeConstructorWithoutAccumulate<Tuple_ extends AbstractTuple> PropagationQueue<T> A propagation queue is an ordered collection of items that need to be sent to the next node.Propagator Propagator is an interface that exposes thePropagationQueuetoBavetConstraintSession.TupleSource -
Class Summary Class Description AbstractFlattenLastNode<InTuple_ extends AbstractTuple,OutTuple_ extends AbstractTuple,EffectiveItem_,FlattenedItem_> AbstractGroupNode<InTuple_ extends AbstractTuple,OutTuple_ extends AbstractTuple,GroupKey_,ResultContainer_,Result_> AbstractIfExistsNode<LeftTuple_ extends AbstractTuple,Right_> This class has two direct children:AbstractIndexedIfExistsNodeandAbstractUnindexedIfExistsNode.AbstractIfExistsNode.FilteringTracker<LeftTuple_ extends AbstractTuple> AbstractIndexedIfExistsNode<LeftTuple_ extends AbstractTuple,Right_> There is a strong likelihood that any change to this class, which is not related to indexing, should also be made toAbstractUnindexedIfExistsNode.AbstractIndexedJoinNode<LeftTuple_ extends AbstractTuple,Right_,OutTuple_ extends AbstractTuple> There is a strong likelihood that any change to this class, which is not related to indexing, should also be made toAbstractUnindexedJoinNode.AbstractJoinNode<LeftTuple_ extends AbstractTuple,Right_,OutTuple_ extends AbstractTuple> This class has two direct children:AbstractIndexedJoinNodeandAbstractUnindexedJoinNode.AbstractMapNode<InTuple_ extends AbstractTuple,OutTuple_ extends AbstractTuple> AbstractNode AbstractScorer<Tuple_ extends AbstractTuple> AbstractUnindexedIfExistsNode<LeftTuple_ extends AbstractTuple,Right_> There is a strong likelihood that any change made to this class should also be made toAbstractIndexedIfExistsNode.AbstractUnindexedJoinNode<LeftTuple_ extends AbstractTuple,Right_,OutTuple_ extends AbstractTuple> There is a strong likelihood that any change made to this class should also be made toAbstractIndexedJoinNode.BavetAbstractConstraintStream<Solution_> ExistsCounter<Tuple_ extends AbstractTuple> NodeBuildHelper<Score_ extends Score<Score_>> StaticPropagationQueue<Tuple_ extends AbstractTuple> The implementation moves tuples directly into an either retract, update or insert queue, without any option of moving between the queues.