org.eclipse.viatra.query.runtime.matchers.planning

## Interface IOperationCompiler<Collector>

- Type Parameters:
    `Collector` - the handle of a receiver-like RETE ending to which plans can be connected

      public interface IOperationCompiler<Collector>

  An implicit common parameter is the "effort" PatternDescription. This indicates that the build request is part of an effort to build the matcher of the given pattern; it it important to record this during code generation so that the generated code can be separated according to patterns.
  No Implement:
    This interface is not intended to be implemented by clients.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `SubPlan` | `binaryEdgeTypePlan(Tuple nodes, java.lang.Object supplierKey)`
    `SubPlan` | `buildBetaNode(SubPlan primaryPlan, SubPlan sidePlan, TupleMask primaryMask, TupleMask sideMask, TupleMask complementer, boolean negative)`
    `void` | `buildConnection(SubPlan parentPlan, Collector collector)`
    `SubPlan` | `buildCountCheckBetaNode(SubPlan primaryPlan, SubPlan sidePlan, TupleMask primaryMask, TupleMask originalSideMask, int resultPositionInSignature)`
    `SubPlan` | `buildCounterBetaNode(SubPlan primaryPlan, SubPlan sidePlan, TupleMask primaryMask, TupleMask originalSideMask, TupleMask complementer, java.lang.Object aggregateResultCalibrationElement)`
    `SubPlan` | `buildEqualityChecker(SubPlan parentPlan, int[] indices)`
    `SubPlan` | `buildFunctionEvaluator(IExpressionEvaluator evaluator, java.util.Map<java.lang.String,java.lang.Integer> tupleNameMap, SubPlan parentPlan, java.lang.Object computedResultCalibrationElement)`
    `SubPlan` | `buildInjectivityChecker(SubPlan parentPlan, int subject, int[] inequalIndices)`
    `SubPlan` | `buildPredicateChecker(IExpressionEvaluator evaluator, java.util.Map<java.lang.String,java.lang.Integer> tupleNameMap, SubPlan parentPlan)`
    `SubPlan` | `buildStartingPlan(java.lang.Object[] constantValues, java.lang.Object[] constantNames)`
    `SubPlan` | `buildTransitiveClosure(SubPlan parentPlan)`
    `SubPlan` | `buildTrimmer(SubPlan parentPlan, TupleMask trimMask, boolean enforceUniqueness)`
    `SubPlan` | `directContainmentPlan(Tuple nodes)`
    `SubPlan` | `directGeneralizationPlan(Tuple nodes)`
    `SubPlan` | `directInstantiationPlan(Tuple nodes)`
    `IOperationCompiler<Collector>` | `getNextContainer()`
    `SubPlan` | `patternCallPlan(Tuple nodes, PQuery supplierKey)`
    `Collector` | `patternCollector(PQuery pattern)`
    `void` | `patternFinished(PQuery pattern, Collector collector)`
    `IOperationCompiler<Collector>` | `putOnTab(PQuery effort)`
    `void` | `reinitialize()`
    `SubPlan` | `ternaryEdgeTypePlan(Tuple nodes, java.lang.Object supplierKey)`
    `SubPlan` | `transitiveContainmentPlan(Tuple nodes)`
    `SubPlan` | `transitiveGeneralizationPlan(Tuple nodes)`
    `SubPlan` | `transitiveInstantiationPlan(Tuple nodes)`
    `SubPlan` | `unaryTypePlan(Tuple nodes, java.lang.Object supplierKey)`

- - ### Method Detail

    - #### patternCollector

          Collector patternCollector(PQuery pattern)

      Throws:
        `ViatraQueryRuntimeException`

    - #### buildConnection

          void buildConnection(SubPlan parentPlan,
                               Collector collector)

    - #### patternFinished

          void patternFinished(PQuery pattern,
                               Collector collector)

      Since:
        0.9

    - #### patternCallPlan

          SubPlan patternCallPlan(Tuple nodes,
                                  PQuery supplierKey)

      Throws:
        `ViatraQueryRuntimeException`

    - #### transitiveInstantiationPlan

          SubPlan transitiveInstantiationPlan(Tuple nodes)

    - #### directInstantiationPlan

          SubPlan directInstantiationPlan(Tuple nodes)

    - #### transitiveGeneralizationPlan

          SubPlan transitiveGeneralizationPlan(Tuple nodes)

    - #### directGeneralizationPlan

          SubPlan directGeneralizationPlan(Tuple nodes)

    - #### transitiveContainmentPlan

          SubPlan transitiveContainmentPlan(Tuple nodes)

    - #### directContainmentPlan

          SubPlan directContainmentPlan(Tuple nodes)

    - #### binaryEdgeTypePlan

          SubPlan binaryEdgeTypePlan(Tuple nodes,
                                     java.lang.Object supplierKey)

    - #### ternaryEdgeTypePlan

          SubPlan ternaryEdgeTypePlan(Tuple nodes,
                                      java.lang.Object supplierKey)

    - #### unaryTypePlan

          SubPlan unaryTypePlan(Tuple nodes,
                                java.lang.Object supplierKey)

    - #### buildStartingPlan

          SubPlan buildStartingPlan(java.lang.Object[] constantValues,
                                    java.lang.Object[] constantNames)

    - #### buildEqualityChecker

          SubPlan buildEqualityChecker(SubPlan parentPlan,
                                       int[] indices)

    - #### buildInjectivityChecker

          SubPlan buildInjectivityChecker(SubPlan parentPlan,
                                          int subject,
                                          int[] inequalIndices)

    - #### buildTransitiveClosure

          SubPlan buildTransitiveClosure(SubPlan parentPlan)

    - #### buildTrimmer

          SubPlan buildTrimmer(SubPlan parentPlan,
                               TupleMask trimMask,
                               boolean enforceUniqueness)

    - #### buildBetaNode

          SubPlan buildBetaNode(SubPlan primaryPlan,
                                SubPlan sidePlan,
                                TupleMask primaryMask,
                                TupleMask sideMask,
                                TupleMask complementer,
                                boolean negative)

    - #### buildCounterBetaNode

          SubPlan buildCounterBetaNode(SubPlan primaryPlan,
                                       SubPlan sidePlan,
                                       TupleMask primaryMask,
                                       TupleMask originalSideMask,
                                       TupleMask complementer,
                                       java.lang.Object aggregateResultCalibrationElement)

    - #### buildCountCheckBetaNode

          SubPlan buildCountCheckBetaNode(SubPlan primaryPlan,
                                          SubPlan sidePlan,
                                          TupleMask primaryMask,
                                          TupleMask originalSideMask,
                                          int resultPositionInSignature)

    - #### buildPredicateChecker

          SubPlan buildPredicateChecker(IExpressionEvaluator evaluator,
                                        java.util.Map<java.lang.String,java.lang.Integer> tupleNameMap,
                                        SubPlan parentPlan)

    - #### buildFunctionEvaluator

          SubPlan buildFunctionEvaluator(IExpressionEvaluator evaluator,
                                         java.util.Map<java.lang.String,java.lang.Integer> tupleNameMap,
                                         SubPlan parentPlan,
                                         java.lang.Object computedResultCalibrationElement)

    - #### getNextContainer

          IOperationCompiler<Collector> getNextContainer()

      Returns:
        an operation compiler that potentially acts on a separate container

    - #### putOnTab

          IOperationCompiler<Collector> putOnTab(PQuery effort)

      Returns:
        an operation compiler that puts build actions on the tab of the given pattern
      Since:
        0.9

    - #### reinitialize

          void reinitialize()