Interface Traverser<T>

All Superinterfaces:
Cloneable, Comparable<Traverser<T>>, Serializable
All Known Subinterfaces:
Traverser.Admin<T>

public interface Traverser<T> extends Serializable, Comparable<Traverser<T>>, Cloneable
A Traverser represents the current state of an object flowing through a Traversal. A traverser maintains a reference to the current object, a traverser-local "sack", a traversal-global sideEffect, a bulk count, and a path history.

Different types of traversers can exist depending on the semantics of the traversal and the desire for space/time optimizations of the developer.

Author:
Marko A. Rodriguez (http://markorodriguez.com)
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Interface
    Description
    static interface 
    The methods in System.Traverser are useful to underlying Step and Traversal implementations.
  • Method Summary

    Modifier and Type
    Method
    Description
    Typecast the traverser to a "system traverser" so Traverser.Admin methods can be accessed.
    long
    A traverser may represent a grouping of traversers to allow for more efficient data propagation.
    Traverser cloning is important when splitting a traverser at a bifurcation point in a traversal.
    default int
    If the underlying object of the traverser is comparable, compare it with the other traverser.
    get()
    Get the object that the traverser is current at.
    default int
    Return the number of times the traverser has gone through a looping section of a traversal.
    default int
    loops(String loopName)
    Return the number of times the traverser has gone through the named looping section of a traversal.
    Get the current path of the traverser.
    default <A> A
    path(String stepLabel)
    Get the object associated with the specified step-label in the traverser's path history.
    default <A> A
    path(Pop pop, String stepLabel)
     
    <S> S
    Get the sack local sack object of this traverser.
    <S> void
    sack(S object)
    Set the traversers sack object to the provided value ("sack the value").
    default <A> A
    sideEffects(String sideEffectKey)
    Get a particular value from the side-effects of the traverser (thus, traversal).
    default void
    sideEffects(String sideEffectKey, Object sideEffectValue)
    Add a particular value to the respective side-effect of the traverser (thus, traversal).
  • Method Details

    • get

      T get()
      Get the object that the traverser is current at.
      Returns:
      The current object of the traverser
    • sack

      <S> S sack()
      Get the sack local sack object of this traverser.
      Type Parameters:
      S - the type of the sack object
      Returns:
      the sack object
    • sack

      <S> void sack(S object)
      Set the traversers sack object to the provided value ("sack the value").
      Type Parameters:
      S - the type of the object
      Parameters:
      object - the new value of the traverser's sack
    • path

      Path path()
      Get the current path of the traverser.
      Returns:
      The path of the traverser
    • path

      default <A> A path(String stepLabel)
      Get the object associated with the specified step-label in the traverser's path history.
      Type Parameters:
      A - the type of the object
      Parameters:
      stepLabel - the step-label in the path to access
      Returns:
      the object associated with that path label (if more than one object occurs at that step, a list is returned)
    • path

      default <A> A path(Pop pop, String stepLabel)
    • loops

      default int loops()
      Return the number of times the traverser has gone through a looping section of a traversal.
      Returns:
      The number of times the traverser has gone through a loop
    • loops

      default int loops(String loopName)
      Return the number of times the traverser has gone through the named looping section of a traversal.
      Parameters:
      loopName - the name applied to the loop or null for the containing loop
      Returns:
      The number of times the traverser has gone through a loop
      Throws:
      IllegalArgumentException - if the loopName is not defined
    • bulk

      long bulk()
      A traverser may represent a grouping of traversers to allow for more efficient data propagation.
      Returns:
      the number of traversers represented in this traverser.
    • sideEffects

      default <A> A sideEffects(String sideEffectKey) throws IllegalArgumentException
      Get a particular value from the side-effects of the traverser (thus, traversal).
      Type Parameters:
      A - the type of the returned object
      Parameters:
      sideEffectKey - the key of the value to get from the sideEffects
      Returns:
      the object in the sideEffects of the respective key
      Throws:
      IllegalArgumentException
    • sideEffects

      default void sideEffects(String sideEffectKey, Object sideEffectValue) throws IllegalArgumentException
      Add a particular value to the respective side-effect of the traverser (thus, traversal).
      Parameters:
      sideEffectKey - the key of the value to set int the sideEffects
      sideEffectValue - the value to set for the sideEffect key
      Throws:
      IllegalArgumentException
    • compareTo

      default int compareTo(Traverser<T> other) throws ClassCastException
      If the underlying object of the traverser is comparable, compare it with the other traverser.
      Specified by:
      compareTo in interface Comparable<T>
      Parameters:
      other - the other traverser that presumably has a comparable internal object
      Returns:
      the comparison of the two objects of the traversers
      Throws:
      ClassCastException - if the object of the traverser is not comparable
    • asAdmin

      default Traverser.Admin<T> asAdmin()
      Typecast the traverser to a "system traverser" so Traverser.Admin methods can be accessed. This is used as a helper method to avoid the awkwardness of ((Traverser.Administrative)traverser). The default implementation simply returns "this" type casted to Traverser.Admin.
      Returns:
      The type-casted traverser
    • clone

      Traverser<T> clone()
      Traverser cloning is important when splitting a traverser at a bifurcation point in a traversal.