Package org.eclipse.viatra.query.runtime.matchers.util

## Interface IMultiLookupAbstract.ToSetsAbstract<Key,​Value>

- All Superinterfaces:
    `IMultiLookup<Key,​Value>`, `IMultiLookupAbstract<Key,​Value,​MarkedMemory.MarkedSet<Value>>`
  Enclosing interface:
    IMultiLookupAbstract<Key,​Value,​Bucket extends MarkedMemory<Value>>

      public static interface IMultiLookupAbstract.ToSetsAbstract<Key,​Value>
      extends IMultiLookupAbstract<Key,​Value,​MarkedMemory.MarkedSet<Value>>

  A multi-lookup whose buckets are sets.

  Not intended as an API, but rather as a 'base class' for implementors. Realized as an interface with default implementations, instead of an abstract class, to ensure that implementors can easily choose a base class such as UnifiedMap to augment.

  Implementor should inherit from a Map-like class (primitive map possible) and bind the lowLevel* methods accordingly.

  No Implement:
    This interface is not intended to be implemented by clients.
  No Reference:
    This interface is not intended to be referenced by clients.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface org.eclipse.viatra.query.runtime.matchers.util.IMultiLookup

      `IMultiLookup.ChangeGranularity`

    - ### Nested classes/interfaces inherited from interface org.eclipse.viatra.query.runtime.matchers.util.IMultiLookupAbstract

      `IMultiLookupAbstract.ToMultisetsAbstract<Key,​Value>, IMultiLookupAbstract.ToSetsAbstract<Key,​Value>`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Default Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `default boolean` | `addToBucket​(MarkedMemory.MarkedSet<Value> bucket, Value value, boolean throwIfImpossible)` | Increases the multiplicity of the value in the bucket.
    `default Value` | `asSingleton​(MarkedMemory.MarkedSet<Value> bucket)` | Checks whether the bucket is a singleton, i.e.
    `default MarkedMemory.MarkedSet<Value>` | `createDeltaBucket​(Value positive, Value negative)` |
    `MarkedMemory.MarkedSet<Value>` | `createMarkedSet()` |
    `default MarkedMemory.MarkedSet<Value>` | `createSingletonBucket​(Value value)` |
    `default boolean` | `duplicatesAllowed()` |
    `default boolean` | `negativesAllowed()` |
    `default boolean` | `removeFromBucket​(MarkedMemory.MarkedSet<Value> bucket, Value value, boolean throwIfImpossible)` | Decreases the multiplicity of the value in the bucket.

    - ### Methods inherited from interface org.eclipse.viatra.query.runtime.matchers.util.IMultiLookup

      `clear, isEmpty, lookupOrEmpty, lookupUnsafeOrEmpty`

    - ### Methods inherited from interface org.eclipse.viatra.query.runtime.matchers.util.IMultiLookupAbstract

      `addPair, addPairInternal, addPairOrNop, addPairPositiveMultiplicity, countKeys, distinctKeys, distinctKeysStream, distinctValues, distinctValuesStream, handleSingleton, lookup, lookupAndRemoveAll, lookupExists, lookupUnsafe, lowLevelGet, lowLevelGetUnsafe, lowLevelKeySet, lowLevelPut, lowLevelPutIfAbsent, lowLevelRemove, lowLevelSize, lowLevelValues, removePair, removePairInternal, removePairOrNop, yieldSingleton`

- - ### Method Detail

    - #### createMarkedSet

          MarkedMemory.MarkedSet<Value> createMarkedSet()

      Returns:
        a fresh, empty marked set

    - #### negativesAllowed

          default boolean negativesAllowed()

      Specified by:
        `negativesAllowed` in interface `IMultiLookupAbstract<Key,​Value,​MarkedMemory.MarkedSet<Value>>`
      Returns:
        iff negative multiplicites are allowed

    - #### duplicatesAllowed

          default boolean duplicatesAllowed()

      Specified by:
        `duplicatesAllowed` in interface `IMultiLookupAbstract<Key,​Value,​MarkedMemory.MarkedSet<Value>>`
      Returns:
        iff larger-than-1 multiplicites are allowed

    - #### addToBucket

          default boolean addToBucket​(MarkedMemory.MarkedSet<Value> bucket,
                                      Value value,
                                      boolean throwIfImpossible)

      Description copied from interface: `IMultiLookupAbstract`
      Increases the multiplicity of the value in the bucket.
      Specified by:
        `addToBucket` in interface `IMultiLookupAbstract<Key,​Value,​MarkedMemory.MarkedSet<Value>>`
      Returns:
        true iff non-duplicate

    - #### removeFromBucket

          default boolean removeFromBucket​(MarkedMemory.MarkedSet<Value> bucket,
                                           Value value,
                                           boolean throwIfImpossible)

      Description copied from interface: `IMultiLookupAbstract`
      Decreases the multiplicity of the value in the bucket.
      Specified by:
        `removeFromBucket` in interface `IMultiLookupAbstract<Key,​Value,​MarkedMemory.MarkedSet<Value>>`
      Returns:
        false if removing duplicate value

    - #### asSingleton

          default Value asSingleton​(MarkedMemory.MarkedSet<Value> bucket)

      Description copied from interface: `IMultiLookupAbstract`
      Checks whether the bucket is a singleton, i.e. it contains a single value with multiplicity +1
      Specified by:
        `asSingleton` in interface `IMultiLookupAbstract<Key,​Value,​MarkedMemory.MarkedSet<Value>>`
      Returns:
        the singleton value, or null if the bucket is not singleton

    - #### createSingletonBucket

          default MarkedMemory.MarkedSet<Value> createSingletonBucket​(Value value)

      Specified by:
        `createSingletonBucket` in interface `IMultiLookupAbstract<Key,​Value,​MarkedMemory.MarkedSet<Value>>`
      Returns:
        a new bucket consisting of a sole value

    - #### createDeltaBucket

          default MarkedMemory.MarkedSet<Value> createDeltaBucket​(Value positive,
                                                                  Value negative)

      Specified by:
        `createDeltaBucket` in interface `IMultiLookupAbstract<Key,​Value,​MarkedMemory.MarkedSet<Value>>`
      Parameters:
        `positive` - the previously existing value, or null if the delta is to contain a single negative tuple
      Returns:
        a new bucket consisting of a delta of two values