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
      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