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>`