Package org.apache.lucene.util.automaton

# Class CompiledAutomaton

java.lang.Object
org.apache.lucene.util.automaton.CompiledAutomaton

All Implemented Interfaces:
  `Accountable`

public class CompiledAutomaton extends Object implements Accountable
Immutable class holding compiled details for a given Automaton. The Automaton could either be deterministic or non-deterministic, For deterministic automaton, it must not have dead states but is not necessarily minimal. And will be executed using `ByteRunAutomaton` For non-deterministic automaton, it will be executed using `NFARunAutomaton`

WARNING: This API is experimental and might change in incompatible ways in the next release.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static enum`
  `CompiledAutomaton.AUTOMATON_TYPE`
  Automata are compiled into different internal forms for the most efficient execution depending upon the language they accept.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `final Automaton`
  `automaton`
  Two dimensional array of transitions, indexed by state number for traversal.
  `final BytesRef`
  `commonSuffixRef`
  Shared common suffix accepted by the automaton.
  `final boolean`
  `finite`
  Indicates if the automaton accepts a finite set of strings.
  `final ByteRunAutomaton`
  `runAutomaton`
  Matcher for quickly determining if a byte[] is accepted.
  `final int`
  `sinkState`
  Which state, if any, accepts all suffixes, else -1.
  `final BytesRef`
  `term`
  For `CompiledAutomaton.AUTOMATON_TYPE.SINGLE` this is the singleton term.
  `final CompiledAutomaton.AUTOMATON_TYPE`
  `type`
  If simplify is true this will be the "simplified" type; else, this is NORMAL

  ### Fields inherited from interface org.apache.lucene.util.Accountable

  `NULL_ACCOUNTABLE`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `CompiledAutomaton(Automaton automaton)`
  Create this, passing simplify=true, so that we try to simplify the automaton.
  `CompiledAutomaton(Automaton automaton, boolean finite, boolean simplify)`
  Create this.
  `CompiledAutomaton(Automaton automaton, boolean finite, boolean simplify, boolean isBinary)`
  Create this.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `equals(Object obj)`
  `BytesRef`
  `floor(BytesRef input, BytesRefBuilder output)`
  Finds largest term accepted by this Automaton, that's <= the provided input term.
  `ByteRunnable`
  `getByteRunnable()`
  Get a `ByteRunnable` instance, it will be different depending on whether a NFA or DFA is passed in, and does not guarantee returning non-null object
  `TermsEnum`
  `getTermsEnum(Terms terms)`
  Return a `TermsEnum` intersecting the provided `Terms` with the terms accepted by this automaton.
  `TransitionAccessor`
  `getTransitionAccessor()`
  Get a `TransitionAccessor` instance, it will be different depending on whether a NFA or DFA is passed in, and does not guarantee returning non-null object
  `int`
  `hashCode()`
  `long`
  `ramBytesUsed()`
  Return the memory usage of this object in bytes.
  `void`
  `visit(QueryVisitor visitor, Query parent, String field)`
  Report back to a QueryVisitor how this automaton matches terms

  ### Methods inherited from class java.lang.Object

  `clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface org.apache.lucene.util.Accountable

  `getChildResources`

- ## Field Details

  - ### type

    public final CompiledAutomaton.AUTOMATON_TYPE type
    If simplify is true this will be the "simplified" type; else, this is NORMAL

  - ### term

    public final BytesRef term
    For `CompiledAutomaton.AUTOMATON_TYPE.SINGLE` this is the singleton term.

  - ### runAutomaton

    public final ByteRunAutomaton runAutomaton
    Matcher for quickly determining if a byte[] is accepted. only valid for `CompiledAutomaton.AUTOMATON_TYPE.NORMAL`.

  - ### automaton

    public final Automaton automaton
    Two dimensional array of transitions, indexed by state number for traversal. The state numbering is consistent with `runAutomaton`. Only valid for `CompiledAutomaton.AUTOMATON_TYPE.NORMAL`.

  - ### commonSuffixRef

    public final BytesRef commonSuffixRef
    Shared common suffix accepted by the automaton. Only valid for `CompiledAutomaton.AUTOMATON_TYPE.NORMAL`, and only when the automaton accepts an infinite language. This will be null if the common prefix is length 0.

  - ### finite

    public final boolean finite
    Indicates if the automaton accepts a finite set of strings. Only valid for `CompiledAutomaton.AUTOMATON_TYPE.NORMAL`.

  - ### sinkState

    public final int sinkState
    Which state, if any, accepts all suffixes, else -1.

- ## Constructor Details

  - ### CompiledAutomaton

    public CompiledAutomaton(Automaton automaton)
    Create this, passing simplify=true, so that we try to simplify the automaton.

  - ### CompiledAutomaton

    public CompiledAutomaton(Automaton automaton, boolean finite, boolean simplify)
    Create this. If simplify is true, we run possibly expensive operations to determine if the automaton is one the cases in `CompiledAutomaton.AUTOMATON_TYPE`. Set finite to true if the automaton is finite, otherwise set to false if infinite or you don't know.

  - ### CompiledAutomaton

    public CompiledAutomaton(Automaton automaton, boolean finite, boolean simplify, boolean isBinary)
    Create this. If simplify is true, we run possibly expensive operations to determine if the automaton is one the cases in `CompiledAutomaton.AUTOMATON_TYPE`. Set finite to true if the automaton is finite, otherwise set to false if infinite or you don't know.

- ## Method Details

  - ### getTermsEnum

    public TermsEnum getTermsEnum(Terms terms) throws IOException
    Return a `TermsEnum` intersecting the provided `Terms` with the terms accepted by this automaton.
    Throws:
      `IOException`

  - ### visit

    public void visit(QueryVisitor visitor, Query parent, String field)
    Report back to a QueryVisitor how this automaton matches terms

  - ### floor

    public BytesRef floor(BytesRef input, BytesRefBuilder output)
    Finds largest term accepted by this Automaton, that's <= the provided input term. The result is placed in output; it's fine for output and input to point to the same bytes. The returned result is either the provided output, or null if there is no floor term (ie, the provided input term is before the first term accepted by this Automaton).

  - ### getByteRunnable

    public ByteRunnable getByteRunnable()
    Get a `ByteRunnable` instance, it will be different depending on whether a NFA or DFA is passed in, and does not guarantee returning non-null object

  - ### getTransitionAccessor

    public TransitionAccessor getTransitionAccessor()
    Get a `TransitionAccessor` instance, it will be different depending on whether a NFA or DFA is passed in, and does not guarantee returning non-null object

  - ### hashCode

    public int hashCode()
    Overrides:
      `hashCode` in class `Object`

  - ### equals

    public boolean equals(Object obj)
    Overrides:
      `equals` in class `Object`

  - ### ramBytesUsed

    public long ramBytesUsed()
    Description copied from interface: `Accountable`
    Return the memory usage of this object in bytes. Negative values are illegal.
    Specified by:
      `ramBytesUsed` in interface `Accountable`