Package ai.timefold.solver.constraint.streams.bavet.common
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.
-
ClassDescriptionAbstractConcatNode<LeftTuple_ extends AbstractTuple,
RightTuple_ extends AbstractTuple, OutTuple_ extends AbstractTuple> Implements the concat operation.AbstractFlattenLastNode<InTuple_ extends AbstractTuple,OutTuple_ extends AbstractTuple, EffectiveItem_, FlattenedItem_> AbstractGroupNode<InTuple_ extends AbstractTuple,OutTuple_ extends AbstractTuple, GroupKey_, ResultContainer_, Result_> This class has two direct children:AbstractIndexedIfExistsNodeandAbstractUnindexedIfExistsNode.AbstractIfExistsNode.FilteringTracker<LeftTuple_ extends AbstractTuple>There is a strong likelihood that any change to this class, which is not related to indexing, should also be made toAbstractUnindexedIfExistsNode.There is a strong likelihood that any change to this class, which is not related to indexing, should also be made toAbstractUnindexedJoinNode.This class has two direct children:AbstractIndexedJoinNodeandAbstractUnindexedJoinNode.AbstractScorer<Tuple_ extends AbstractTuple>There is a strong likelihood that any change made to this class should also be made toAbstractIndexedIfExistsNode.There is a strong likelihood that any change made to this class should also be made toAbstractIndexedJoinNode.BavetAbstractConstraintStream<Solution_>BavetConcatConstraintStream<Solution_>BavetIfExistsConstraintStream<Solution_>BavetJoinConstraintStream<Solution_>BavetScoringConstraintStream<Solution_>BavetStreamBinaryOperation<Solution_>ExistsCounter<Tuple_ extends AbstractTuple>GroupNodeConstructor<Tuple_ extends AbstractTuple>GroupNodeConstructor.GroupBy0Mapping1CollectorNodeBuilder<CollectorA_,Tuple_ extends AbstractTuple> GroupNodeConstructor.GroupBy0Mapping2CollectorNodeBuilder<CollectorA_,CollectorB_, Tuple_ extends AbstractTuple> GroupNodeConstructor.GroupBy0Mapping3CollectorNodeBuilder<CollectorA_,CollectorB_, CollectorC_, Tuple_ extends AbstractTuple> GroupNodeConstructor.GroupBy0Mapping4CollectorNodeBuilder<CollectorA_,CollectorB_, CollectorC_, CollectorD_, Tuple_ extends AbstractTuple> GroupNodeConstructor.GroupBy1Mapping0CollectorNodeBuilder<KeyA_,Tuple_ extends AbstractTuple> GroupNodeConstructor.GroupBy1Mapping1CollectorNodeBuilder<KeyA_,CollectorB_, Tuple_ extends AbstractTuple> GroupNodeConstructor.GroupBy1Mapping2CollectorNodeBuilder<KeyA_,CollectorB_, CollectorC_, Tuple_ extends AbstractTuple> GroupNodeConstructor.GroupBy1Mapping3CollectorNodeBuilder<KeyA_,CollectorB_, CollectorC_, CollectorD_, Tuple_ extends AbstractTuple> GroupNodeConstructor.GroupBy2Mapping0CollectorNodeBuilder<KeyA_,KeyB_, Tuple_ extends AbstractTuple> GroupNodeConstructor.GroupBy2Mapping1CollectorNodeBuilder<KeyA_,KeyB_, CollectorC_, Tuple_ extends AbstractTuple> GroupNodeConstructor.GroupBy2Mapping2CollectorNodeBuilder<KeyA_,KeyB_, CollectorC_, CollectorD_, Tuple_ extends AbstractTuple> GroupNodeConstructor.GroupBy3Mapping0CollectorNodeBuilder<KeyA_,KeyB_, KeyC_, Tuple_ extends AbstractTuple> GroupNodeConstructor.GroupBy3Mapping1CollectorNodeBuilder<KeyA_,KeyB_, KeyC_, CollectorD_, Tuple_ extends AbstractTuple> GroupNodeConstructor.GroupBy4Mapping0CollectorNodeBuilder<KeyA_,KeyB_, KeyC_, KeyD_, Tuple_ extends AbstractTuple> GroupNodeConstructor.NodeConstructorWithAccumulate<Tuple_ extends AbstractTuple>GroupNodeConstructor.NodeConstructorWithoutAccumulate<Tuple_ extends AbstractTuple>NodeBuildHelper<Score_ extends Score<Score_>>A propagation queue is an ordered collection of items that need to be sent to the next node.Propagator is an interface that exposes thePropagationQueuetoBavetConstraintSession.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.