Class SULCache<I,​O>

  • Type Parameters:
    I - input symbol type
    O - output symbol type
    All Implemented Interfaces:
    LearningCache<MealyMachine<?,​I,​?,​O>,​I,​Word<O>>, LearningCache.MealyLearningCache<I,​O>, Resumable<de.learnlib.filter.cache.sul.AbstractSULCache.SULCacheState<I,​O>>, SUL<I,​O>, SupportsGrowingAlphabet<I>
    Direct Known Subclasses:
    ThreadSafeSULCache

    public class SULCache<I,​O>
    extends Object
    A cache to be used with a SUL.

    Because on a SUL, a query is executed step-by-step, it is impossible to determine in advance whether the cached information is sufficient to answer the complete query. However, in general it is undesired to execute any actions on the underlying SUL as long as the requested information can be provided from the cache.

    This class therefore defers any real execution to the point where the cached information is definitely insufficient; if such a point is not reached before a call to SUL.post() is made, the underlying SUL is not queried.

    Note: this implementation is not thread-safe. If you require a cache that is usable in a parallel environment. use the ThreadSafeSULCache (or rather the ThreadSafeSULCaches factory) from the learnlib-parallelism artifact.

    • Method Detail

      • pre

        public void pre()
        Description copied from interface: SUL
        setup SUL.
        Specified by:
        pre in interface SUL<I,​O>
      • post

        public void post()
        Description copied from interface: SUL
        shut down SUL.
        Specified by:
        post in interface SUL<I,​O>
      • step

        public O step​(I in)
        Description copied from interface: SUL
        make one step on the SUL.
        Specified by:
        step in interface SUL<I,​O>
        Parameters:
        in - input to the SUL
        Returns:
        output of SUL
      • canFork

        public boolean canFork()
        Description copied from interface: SUL
        Returns whether this SUL is capable of forking.
        Specified by:
        canFork in interface SUL<I,​O>
        Returns:
        true if this SUL can be forked, false otherwise
        See Also:
        SUL.fork()
      • fork

        public SUL<I,​O> fork()
        Description copied from interface: SUL
        Forks this SUL, if possible. The fork of a SUL is a copy which behaves exactly the same as this SUL. This method should always return a reseted SUL, regardless of whether this call is made between a call to SUL.pre() and SUL.post().

        If SUL.canFork() returns true, this method must return a non-null object, which should behave exactly like this SUL (in particular, it must be forkable as well). Otherwise, a UnsupportedOperationException must be thrown.

        Implementation note: if resetting a SUL changes the internal state of this object in a non-trivial way (e.g., incrementing a counter to ensure independent sessions), care must be taken that forks of this SUL manipulate the same internal state.

        Specified by:
        fork in interface SUL<I,​O>
        Returns:
        a fork of this SUL.
      • createCacheConsistencyTest

        public EquivalenceOracle.MealyEquivalenceOracle<I,​O> createCacheConsistencyTest()
        Description copied from interface: LearningCache
        Creates a cache consistency test. A cache consistency test is an equivalence oracle which checks a given hypothesis against the current contents of the cache. Hence, no queries are posed to the underlying system.

        The created cache consistency test is backed by the cache contents. This method does not need to be invoked repeatedly when the cache contents change.

        Specified by:
        createCacheConsistencyTest in interface LearningCache<I,​O,​C extends de.learnlib.filter.cache.sul.AbstractSULCache.SULCacheState<I,​O>>
        Returns:
        a cache consistency test for the contents of this cache
      • suspend

        public C suspend()
        Description copied from interface: Resumable
        Expose the state object.
        Specified by:
        suspend in interface Resumable<I>
        Returns:
        The state.
      • resume

        public void resume​(C state)
        Description copied from interface: Resumable
        Resume the datastructure from a previously suspended point in time.
        Specified by:
        resume in interface Resumable<I>
        Parameters:
        state - The learner state.
      • size

        public int size()