Package org.apache.lucene.misc.util.fst

# Class UpToTwoPositiveIntOutputs

java.lang.Object
org.apache.lucene.util.fst.Outputs<Object>
org.apache.lucene.misc.util.fst.UpToTwoPositiveIntOutputs

public final class UpToTwoPositiveIntOutputs extends Outputs<Object>
An FST `Outputs` implementation where each output is one or two non-negative long values. If it's a single output, Long is returned; else, TwoLongs. Order is preserved in the TwoLongs case, ie .first is the first input/output added to Builder, and .second is the second. You cannot store 0 output with this (that's reserved to mean "no output")!

NOTE: the only way to create a TwoLongs output is to add the same input to the FST twice in a row. This is how the FST maps a single input to two outputs (e.g. you cannot pass a TwoLongs to `FSTCompiler.add(org.apache.lucene.util.IntsRef, T)`. If you need more than two then use `ListOfOutputs`, but if you only have at most 2 then this implementation will require fewer bytes as it steals one bit from each long value.

NOTE: the resulting FST is not guaranteed to be minimal! See `FSTCompiler`.

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 final record`
  `UpToTwoPositiveIntOutputs.TwoLongs`
  Holds two long outputs.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Object`
  `add(Object _prefix, Object _output)`
  `Long`
  `common(Object _output1, Object _output2)`
  `Long`
  `get(long v)`
  `UpToTwoPositiveIntOutputs.TwoLongs`
  `get(long first, long second)`
  `Object`
  `getNoOutput()`
  `static UpToTwoPositiveIntOutputs`
  `getSingleton(boolean doShare)`
  `Object`
  `merge(Object first, Object second)`
  `String`
  `outputToString(Object output)`
  `long`
  `ramBytesUsed(Object o)`
  `Object`
  `read(DataInput in)`
  `Long`
  `subtract(Object _output, Object _inc)`
  `void`
  `write(Object _output, DataOutput out)`

  ### Methods inherited from class org.apache.lucene.util.fst.Outputs

  `readFinalOutput, skipFinalOutput, skipOutput, writeFinalOutput`

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

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

- ## Method Details

  - ### getSingleton

    public static UpToTwoPositiveIntOutputs getSingleton(boolean doShare)

  - ### get

    public Long get(long v)

  - ### get

    public UpToTwoPositiveIntOutputs.TwoLongs get(long first, long second)

  - ### common

    public Long common(Object _output1, Object _output2)
    Specified by:
      `common` in class `Outputs<Object>`

  - ### subtract

    public Long subtract(Object _output, Object _inc)
    Specified by:
      `subtract` in class `Outputs<Object>`

  - ### add

    public Object add(Object _prefix, Object _output)
    Specified by:
      `add` in class `Outputs<Object>`

  - ### write

    public void write(Object _output, DataOutput out) throws IOException
    Specified by:
      `write` in class `Outputs<Object>`
    Throws:
      `IOException`

  - ### read

    public Object read(DataInput in) throws IOException
    Specified by:
      `read` in class `Outputs<Object>`
    Throws:
      `IOException`

  - ### getNoOutput

    public Object getNoOutput()
    Specified by:
      `getNoOutput` in class `Outputs<Object>`

  - ### outputToString

    public String outputToString(Object output)
    Specified by:
      `outputToString` in class `Outputs<Object>`

  - ### merge

    public Object merge(Object first, Object second)
    Overrides:
      `merge` in class `Outputs<Object>`

  - ### ramBytesUsed

    public long ramBytesUsed(Object o)
    Specified by:
      `ramBytesUsed` in class `Outputs<Object>`