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

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    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 Detail

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