Package de.learnlib.oracle.membership
Class AbstractSULOmegaOracle<S,I,O,Q>
- java.lang.Object
-
- de.learnlib.oracle.membership.AbstractSULOmegaOracle<S,I,O,Q>
-
- Type Parameters:
S
- the state type of theObservableSUL
I
- the input typeO
- the output typeQ
- the state information type that is used to answerOmegaQuery
s
- All Implemented Interfaces:
OmegaMembershipOracle<Q,I,Word<O>>
,OmegaMembershipOracle.MealyOmegaMembershipOracle<Q,I,O>
,OmegaQueryAnswerer<Q,I,Word<O>>
,BatchProcessor<OmegaQuery<I,Word<O>>>
public abstract class AbstractSULOmegaOracle<S,I,O,Q> extends Object implements OmegaMembershipOracle.MealyOmegaMembershipOracle<Q,I,O>
An omega membership oracle for anObservableSUL
.The behavior is similar to a
SULOracle
, except that this class answersOmegaQuery
s.After some symbols (i.e. after
OmegaQuery.getPrefix()
, and after eachOmegaQuery.getLoop()
) the state of theObservableSUL
is retrieved, and used to answer the query.This class is not thread-safe.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface de.learnlib.oracle.OmegaMembershipOracle
OmegaMembershipOracle.DFAOmegaMembershipOracle<S,I>, OmegaMembershipOracle.MealyOmegaMembershipOracle<S,I,O>
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractSULOmegaOracle(ObservableSUL<S,I,O> sul)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description Pair<@Nullable Word<O>,Integer>
answerQuery(Word<I> prefix, Word<I> loop, int repeat)
MembershipOracle.MealyMembershipOracle<I,O>
getMembershipOracle()
Returns a regular membership oracle.protected abstract Q
getQueryState(ObservableSUL<S,I,O> sul)
ObservableSUL<S,I,O>
getSul()
Gets theObservableSUL
.static <S,I,O>
AbstractSULOmegaOracle<S,I,O,?>newOracle(ObservableSUL<S,I,O> sul)
Creates a newAbstractSULOmegaOracle
that assumes theSUL
can not make deep copies.static <S,I,O>
AbstractSULOmegaOracle<S,I,O,?>newOracle(ObservableSUL<S,I,O> sul, boolean deepCopies)
Creates a newAbstractSULOmegaOracle
, while making sure the invariants of theObservableSUL
are satisfied.void
processQueries(Collection<? extends OmegaQuery<I,Word<O>>> queries)
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface de.learnlib.oracle.OmegaMembershipOracle
asOracle, isSameState, processBatch, processQuery
-
-
-
-
Constructor Detail
-
AbstractSULOmegaOracle
protected AbstractSULOmegaOracle(ObservableSUL<S,I,O> sul)
-
-
Method Detail
-
getSul
public ObservableSUL<S,I,O> getSul()
Gets theObservableSUL
.- Returns:
- the
ObservableSUL
.
-
processQueries
public void processQueries(Collection<? extends OmegaQuery<I,Word<O>>> queries)
- Specified by:
processQueries
in interfaceOmegaMembershipOracle<S,I,O>
-
getQueryState
protected abstract Q getQueryState(ObservableSUL<S,I,O> sul)
-
answerQuery
public Pair<@Nullable Word<O>,Integer> answerQuery(Word<I> prefix, Word<I> loop, int repeat)
- Specified by:
answerQuery
in interfaceOmegaMembershipOracle<S,I,O>
- Specified by:
answerQuery
in interfaceOmegaQueryAnswerer<S,I,O>
-
getMembershipOracle
public MembershipOracle.MealyMembershipOracle<I,O> getMembershipOracle()
Description copied from interface:OmegaMembershipOracle
Returns a regular membership oracle.- Specified by:
getMembershipOracle
in interfaceOmegaMembershipOracle<S,I,O>
- Specified by:
getMembershipOracle
in interfaceOmegaMembershipOracle.MealyOmegaMembershipOracle<S,I,O>
- Returns:
- a regular membership oracle.
-
newOracle
public static <S,I,O> AbstractSULOmegaOracle<S,I,O,?> newOracle(ObservableSUL<S,I,O> sul, boolean deepCopies)
Creates a newAbstractSULOmegaOracle
, while making sure the invariants of theObservableSUL
are satisfied.- Type Parameters:
S
- the state typeI
- the input typeO
- the output type- Parameters:
sul
- theObservableSUL
to wrap around.deepCopies
- whether to test for state equivalence directly on the retrieved state.- Returns:
- the
AbstractSULOmegaOracle
.
-
newOracle
public static <S,I,O> AbstractSULOmegaOracle<S,I,O,?> newOracle(ObservableSUL<S,I,O> sul)
Creates a newAbstractSULOmegaOracle
that assumes theSUL
can not make deep copies.- Type Parameters:
S
- the state typeI
- the input typeO
- the output type- See Also:
newOracle(ObservableSUL, boolean)
-
-