Class IteratorInstance<N,R>

java.lang.Object
com.vladsch.flexmark.tree.iteration.IteratorInstance<N,R>
All Implemented Interfaces:
ValueIteration<R>, VoidIteration

public final class IteratorInstance<N,R> extends Object implements ValueIteration<R>
  • Field Details

    • LOG_INFO

      private static final org.slf4j.Logger LOG_INFO
    • LOG_TRACE

      private static final org.slf4j.Logger LOG_TRACE
    • myIteration

      private IteratorInstance.Iteration<N> myIteration
    • myRecursions

      @Nullable private @Nullable Stack<IteratorInstance.Iteration<N>> myRecursions
    • myIterationConditions

      @NotNull private final @NotNull IterationConditions<N> myIterationConditions
    • myRecursionPredicate

      @NotNull private final @NotNull Predicate<? super N> myRecursionPredicate
    • myFilterPredicate

      @NotNull private final @NotNull Predicate<? super N> myFilterPredicate
    • myTotalLoopCount

      private int myTotalLoopCount
    • myTotalAcceptCount

      private int myTotalAcceptCount
    • myMatch

      @Nullable private N myMatch
    • myDataSet

      @Nullable private @Nullable MutableDataSet myDataSet
    • myDefaultValue

      @NotNull private final @NotNull Object myDefaultValue
    • myResult

      @NotNull private @NotNull Object myResult
    • myBreak

      private boolean myBreak
    • myHadRecurse

      private boolean myHadRecurse
    • myIsDefaultResult

      private boolean myIsDefaultResult
    • myMaxRecursions

      private int myMaxRecursions
  • Constructor Details

    • IteratorInstance

      public IteratorInstance(@NotNull @NotNull IterationConditions<N> iterationConditions, @NotNull @NotNull Predicate<? super N> filterPredicate, @NotNull @NotNull Predicate<? super N> recursionPredicate, @NotNull N element)
    • IteratorInstance

      public IteratorInstance(@NotNull @NotNull IterationConditions<N> iterationConditions, @NotNull @NotNull Predicate<? super N> filterPredicate, @NotNull @NotNull Predicate<? super N> recursionPredicate, @NotNull N element, @NotNull @NotNull Object defaultValue)
  • Method Details

    • iterate

      public void iterate(@NotNull @NotNull VoidIterationConsumer<? super N> consumer)
    • iterate

      public void iterate(@NotNull @NotNull ValueIterationConsumer<? super N, R> consumer)
    • getHaveNext

      public boolean getHaveNext()
      Specified by:
      getHaveNext in interface VoidIteration
      Returns:
      true if have next element, does not mean it matches filters, just raw next from loop iterator, fast check
    • getHaveAcceptableNext

      public boolean getHaveAcceptableNext()
      Specified by:
      getHaveAcceptableNext in interface VoidIteration
      Returns:
      true if have next element and it passes element filters.

      NOTE: ValueIterationConsumerAdapter not invoked. It is part of the consumer.accept() call hierarchy and can have code side-effects. Only predicate filters are tested. This does not mean the final consumer will see this value.

    • setResult

      public void setResult(@NotNull @NotNull Object value)
      Description copied from interface: ValueIteration
      Set the result which will be returned by the loop if terminated without ValueIteration.Return(Object) call.
      Specified by:
      setResult in interface ValueIteration<N>
      Parameters:
      value - value to return from the loop
    • getResult

      @NotNull public R getResult()
      Specified by:
      getResult in interface ValueIteration<N>
      Returns:
      current result value
    • Return

      public void Return(@NotNull @NotNull Object value)
      Description copied from interface: ValueIteration
      Set result value and terminate all recursions
      Specified by:
      Return in interface ValueIteration<N>
      Parameters:
      value - value to return for the result of the loop
    • Recurse

      private void Recurse()
      Unconditionally recurse into current element
    • doReturn

      public void doReturn()
      Description copied from interface: VoidIteration
      Break out of all recursion levels and return current result value for the loop if value loop
      Specified by:
      doReturn in interface VoidIteration
    • dropRecursions

      private void dropRecursions(int iteration, boolean inclusive)
    • doContinue

      public void doContinue(int recursionLevel)
      Description copied from interface: VoidIteration
      Continue with the next iteration of the given recursion level
      Specified by:
      doContinue in interface VoidIteration
      Parameters:
      recursionLevel - 0 current, <0 previous recursion levels, gt;0 actual recursion level
    • doBreak

      public void doBreak(int recursionLevel)
      Description copied from interface: VoidIteration
      Break out of given recursion level
      Specified by:
      doBreak in interface VoidIteration
      Parameters:
      recursionLevel - 0 current, lt;0 previous recursion levels, gt;0 actual recursion level
    • getData

      public MutableDataHolder getData()
      Description copied from interface: VoidIteration
      Per loop instance data instance can be used to store context information

      Exists between VoidIterationConsumer.beforeStart(VoidIteration) and ValueIterationConsumer.afterEnd(ValueIteration) for consumer and

      lifetime of IteratorInstance for caller of TreeIterator.iterate(N, R, ValueIterationConsumer)

      Specified by:
      getData in interface VoidIteration
      Returns:
      per loop instance mutable data holder
    • getMatch

      @Nullable public N getMatch()
    • isComplete

      public boolean isComplete()
      Specified by:
      isComplete in interface VoidIteration
      Returns:
      true if current iteration is complete ie. had ( Break(), Continue(), Return(), Complete())
    • isIncomplete

      public boolean isIncomplete()
      Specified by:
      isIncomplete in interface VoidIteration
      Returns:
      true if current iteration is not complete, ie. need to continue processing
    • ifIncomplete

      public void ifIncomplete(@NotNull @NotNull Runnable runnable)
      Description copied from interface: VoidIteration
      Run the passed code only if the current iteration is not complete
      Specified by:
      ifIncomplete in interface VoidIteration
      Parameters:
      runnable - to run
    • doComplete

      public void doComplete()
      Description copied from interface: VoidIteration
      Complete current iteration, ie. isComplete() will report true and isIncomplete() false

      Purely a convenience feature to use without needing to track if break or continue have been executed

      Specified by:
      doComplete in interface VoidIteration
    • isTerminated

      public boolean isTerminated()
      Specified by:
      isTerminated in interface VoidIteration
      Returns:
      true if looping terminated by VoidIteration.doReturn(), or VoidIteration.doBreak() of the last recursion level.
    • getLoopCount

      public int getLoopCount()
      Specified by:
      getLoopCount in interface VoidIteration
      Returns:
      times through the loop of the current recursion level, includes skipped elements due to filtering
    • getAcceptCount

      public int getAcceptCount()
      Specified by:
      getAcceptCount in interface VoidIteration
      Returns:
      total times consumer was invoked, ie. valid elements
    • getTotalLoopCount

      public int getTotalLoopCount()
      Specified by:
      getTotalLoopCount in interface VoidIteration
      Returns:
      current loop count across all recursions
    • getTotalAcceptCount

      public int getTotalAcceptCount()
      Specified by:
      getTotalAcceptCount in interface VoidIteration
      Returns:
      accept count across all recursions
    • getRecursionLevel

      public int getRecursionLevel()
      Specified by:
      getRecursionLevel in interface VoidIteration
      Returns:
      count of recursion level, can use in Break(recursionLevel) or Continue(recursionLevel) to break/continue a particular recursion
    • isDefaultResult

      public boolean isDefaultResult()
      Specified by:
      isDefaultResult in interface ValueIteration<N>
      Returns:
      true if the current loop result value was never set (ie. only set at loop instantiation with defaultValue)

      NOTE: does not test current value with equality to default value, set by ValueIteration.setResult(Object) or ValueIteration.Return(Object)

    • getDefaultValue

      @NotNull public R getDefaultValue()
      Specified by:
      getDefaultValue in interface ValueIteration<N>
      Returns:
      defaultValue passed to loop instance