/**
  * @param conclusionProcessor
  * @param saturationStateWriter
  * @param localStatistics
  * @return an {@link InputProcessor} that processes {@link Conclusion}s in {@link Context}s within
  *     an individual worker thread for the input root {@link IndexedClassExpression} using the
  *     supplied {@link SaturationStateWriter} and updates the supplied local {@link
  *     SaturationStatistics} accordingly
  */
 protected InputProcessor<IndexedContextRoot> getEngine(
     ConclusionVisitor<? super Context, Boolean> conclusionProcessor,
     SaturationStateWriter<? extends C> saturationStateWriter,
     WorkerLocalTodo localTodo,
     SaturationStatistics localStatistics) {
   conclusionProcessor =
       SaturationUtils.getTimedConclusionVisitor(conclusionProcessor, localStatistics);
   return new BasicRuleEngine(
       saturationState_.getOntologyIndex(),
       conclusionProcessor,
       localTodo,
       this,
       saturationStateWriter,
       aggregatedStats_,
       localStatistics);
 }
 /**
  * Creates a new primary {@link SaturationStateWriter} for the {@link SaturationState} to be used
  * by an engine of this {@link RuleApplicationFactory}. This {@link SaturationStateWriter} can be
  * further extended and optimized.
  *
  * @param creationListener
  * @param modificationListener
  * @return a new writer for the main {@link SaturationState} to be used by engine.
  */
 SaturationStateWriter<? extends C> getBaseWriter(
     ContextCreationListener creationListener, ContextModificationListener modificationListener) {
   // by default the writer can create new contexts
   return saturationState_.getContextCreatingWriter(creationListener, modificationListener);
 }