Package org.apache.lucene.util.automaton
Class Automaton
java.lang.Object
org.apache.lucene.util.automaton.Automaton
- All Implemented Interfaces:
Accountable,TransitionAccessor
Represents an automaton and all its states and transitions. States are integers and must be
created using
createState(). Mark a state as an accept state using setAccept(int, boolean). Add
transitions using addTransition(int, int, int). Each state must have all of its transitions added at
once; if this is too restrictive then use Automaton.Builder instead. State 0 is always
the initial state. Once a state is finished, either because you've starting adding transitions to
another state or you call finishState(), then that states transitions are sorted (first by
min, then max, then dest) and reduced (transitions with adjacent labels going to the same dest
are combined).- WARNING: This API is experimental and might change in incompatible ways in the next release.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classRecords new states and transitions and thenAutomaton.Builder.finish()creates theAutomaton. -
Field Summary
Fields inherited from interface org.apache.lucene.util.Accountable
NULL_ACCOUNTABLE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddEpsilon(int source, int dest) Add a [virtual] epsilon transition between source and dest.voidaddTransition(int source, int dest, int label) Add a new transition with min = max = label.voidaddTransition(int source, int dest, int min, int max) Add a new transition with the specified source, dest, min, max.voidCopies over all states/transitions from other.intCreate a new state.voidFinishes the current state; call this once you are done adding transitions for a state.Returns accept states.voidIterate to the next transition after the provided oneintHow many states this automaton has.intHow many transitions this automaton has.intgetNumTransitions(int state) How many transitions this state has.Transition[][]Sugar to get all transitions for all states.int[]Returns sorted array of all interval start points.voidgetTransition(int state, int index, Transition t) Fill the providedTransitionwith the index'th transition leaving the specified state.intinitTransition(int state, Transition t) Initialize the provided Transition to iterate through all transitions leaving the specified state.booleanisAccept(int state) Returns true if this state is an accept state.booleanReturns true if this automaton is deterministic (for ever state there is only one transition for each label).intnext(Transition transition, int label) Looks for the next transition that matches the provided label, assuming determinism.longReturn the memory usage of this object in bytes.voidsetAccept(int state, boolean accept) Set or clear this state as an accept state.intstep(int state, int label) Performs lookup in transitions, assuming determinism.toDot()Returns the dot (graphviz) representation of this automaton.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.lucene.util.Accountable
getChildResources
-
Constructor Details
-
Automaton
public Automaton()Sole constructor; creates an automaton with no states. -
Automaton
public Automaton(int numStates, int numTransitions) Constructor which creates an automaton with enough space for the given number of states and transitions.- Parameters:
numStates- Number of states.numTransitions- Number of transitions.
-
-
Method Details
-
createState
public int createState()Create a new state. -
setAccept
public void setAccept(int state, boolean accept) Set or clear this state as an accept state. -
getSortedTransitions
Sugar to get all transitions for all states. This is object-heavy; it's better to iterate state by state instead. -
getAcceptStates
Returns accept states. If the bit is set then that state is an accept state.expert: Use
isAccept(int)instead, unless you really need to scan bits.- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
- This method signature may change in the future
-
isAccept
public boolean isAccept(int state) Returns true if this state is an accept state. -
addTransition
public void addTransition(int source, int dest, int label) Add a new transition with min = max = label. -
addTransition
public void addTransition(int source, int dest, int min, int max) Add a new transition with the specified source, dest, min, max. -
addEpsilon
public void addEpsilon(int source, int dest) Add a [virtual] epsilon transition between source and dest. Dest state must already have all transitions added because this method simply copies those same transitions over to source. -
copy
Copies over all states/transitions from other. The states numbers are sequentially assigned (appended). -
isDeterministic
public boolean isDeterministic()Returns true if this automaton is deterministic (for ever state there is only one transition for each label). -
finishState
public void finishState()Finishes the current state; call this once you are done adding transitions for a state. This is automatically called if you start adding transitions to a new source state, but for the last state you add you need to this method yourself. -
getNumStates
public int getNumStates()How many states this automaton has. -
getNumTransitions
public int getNumTransitions()How many transitions this automaton has. -
getNumTransitions
public int getNumTransitions(int state) Description copied from interface:TransitionAccessorHow many transitions this state has.- Specified by:
getNumTransitionsin interfaceTransitionAccessor
-
initTransition
Description copied from interface:TransitionAccessorInitialize the provided Transition to iterate through all transitions leaving the specified state. You must callTransitionAccessor.getNextTransition(org.apache.lucene.util.automaton.Transition)to get each transition. Returns the number of transitions leaving this state.- Specified by:
initTransitionin interfaceTransitionAccessor
-
getNextTransition
Description copied from interface:TransitionAccessorIterate to the next transition after the provided one- Specified by:
getNextTransitionin interfaceTransitionAccessor
-
getTransition
Description copied from interface:TransitionAccessorFill the providedTransitionwith the index'th transition leaving the specified state.- Specified by:
getTransitionin interfaceTransitionAccessor
-
toDot
Returns the dot (graphviz) representation of this automaton. This is extremely useful for visualizing the automaton. -
getStartPoints
public int[] getStartPoints()Returns sorted array of all interval start points. -
step
public int step(int state, int label) Performs lookup in transitions, assuming determinism.- Parameters:
state- starting statelabel- codepoint to look up- Returns:
- destination state, -1 if no matching outgoing transition
-
next
Looks for the next transition that matches the provided label, assuming determinism.This method is similar to
step(int, int)but is used more efficiently when iterating over multiple transitions from the same source state. It keeps the latest reached transition index intransition.transitionUptoso the next call to this method can continue from there instead of restarting from the first transition.- Parameters:
transition- The transition to start the lookup from (inclusive, using itsTransition.sourceandTransition.transitionUpto). It is updated with the matched transition; or withTransition.dest= -1 if no match.label- The codepoint to look up.- Returns:
- The destination state; or -1 if no matching outgoing transition.
-
ramBytesUsed
public long ramBytesUsed()Description copied from interface:AccountableReturn the memory usage of this object in bytes. Negative values are illegal.- Specified by:
ramBytesUsedin interfaceAccountable
-