class TriScorer<A, B, C> extends AbstractScorer<TriTuple<A, B, C>> {

    private final TriFunction<A, B, C, UndoScoreImpacter> scoreImpacter;

    public TriScorer(String constraintPackage, String constraintName, Score<?> constraintWeight,
            TriFunction<A, B, C, UndoScoreImpacter> scoreImpacter, int inputStoreIndex) {
        super(constraintPackage, constraintName, constraintWeight, inputStoreIndex);
        this.scoreImpacter = scoreImpacter;
    }

    @Override
    protected UndoScoreImpacter impact(TriTuple<A, B, C> tuple) {<FILL_FUNCTION_BODY>}
}

        try {
            return scoreImpacter.apply(tuple.getFactA(), tuple.getFactB(), tuple.getFactC());
        } catch (Exception e) {
            throw createExceptionOnImpact(tuple, e);
        }
    
<methods>public final void insert(TriTuple<A,B,C>) ,public final void retract(TriTuple<A,B,C>) ,public final java.lang.String toString() ,public final void update(TriTuple<A,B,C>) <variables>private final non-sealed java.lang.String constraintId,private final non-sealed Score<?> constraintWeight,private final non-sealed int inputStoreIndex