Package org.h2.mvstore

# Class MVMap.DecisionMaker<V>

java.lang.Object
org.h2.mvstore.MVMap.DecisionMaker<V>

Type Parameters:
  `V` - value type of the map

Enclosing class:
  `MVMap<K,V>`

public abstract static class MVMap.DecisionMaker<V> extends Object
Class DecisionMaker provides callback interface (and should become a such in Java 8) for MVMap.operate() method. It provides control logic to make a decision about how to proceed with update at the point in execution when proper place and possible existing value for insert/update/delete key is found. Revised value for insert/update is also provided based on original input value and value currently existing in the map.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final MVMap.DecisionMaker<Object>`
`DEFAULT`
Decision maker for transaction rollback.
`static final MVMap.DecisionMaker<Object>`
`PUT`
Decision maker for put().
`static final MVMap.DecisionMaker<Object>`
`REMOVE`
Decision maker for remove().

## Constructor Summary

Constructors
Constructor
Description
`DecisionMaker()`

## Method Summary

Modifier and Type
Method
Description
`abstract MVMap.Decision`
`decide(V existingValue, V providedValue)`
Makes a decision about how to proceed with the update.
`MVMap.Decision`
`decide(V existingValue, V providedValue, CursorPos<?,?> tip)`
Makes a decision about how to proceed with the update.
`void`
`reset()`
Resets internal state (if any) of this DecisionMaker to it's initial state.
`<T extends V>
T`
`selectValue(T existingValue, T providedValue)`
Provides revised value for insert/update based on original input value and value currently existing in the map.

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

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

## Field Details

### DEFAULT

public static final MVMap.DecisionMaker<Object> DEFAULT
Decision maker for transaction rollback.

### PUT

public static final MVMap.DecisionMaker<Object> PUT
Decision maker for put().

### REMOVE

public static final MVMap.DecisionMaker<Object> REMOVE
Decision maker for remove().

## Constructor Details

### DecisionMaker

public DecisionMaker()

## Method Details

### decide

public MVMap.Decision decide(V existingValue, V providedValue, CursorPos<?,?> tip)
Makes a decision about how to proceed with the update.

Parameters:
  `existingValue` - the old value
  `providedValue` - the new value
  `tip` - the cursor position
Returns:
  the decision

### decide

public abstract MVMap.Decision decide(V existingValue, V providedValue)
Makes a decision about how to proceed with the update.

Parameters:
  `existingValue` - value currently exists in the map
  `providedValue` - original input value
Returns:
  PUT if a new value need to replace existing one or a new value to be inserted if there is none REMOVE if existing value should be deleted ABORT if update operation should be aborted or repeated later REPEAT if update operation should be repeated immediately

### selectValue

public <T extends V> T selectValue(T existingValue, T providedValue)
Provides revised value for insert/update based on original input value and value currently existing in the map. This method is only invoked after call to decide(), if it returns PUT.

Type Parameters:
  `T` - value type
Parameters:
  `existingValue` - value currently exists in the map
  `providedValue` - original input value
Returns:
  value to be used by insert/update

### reset

public void reset()
Resets internal state (if any) of this DecisionMaker to it's initial state. This method is invoked whenever concurrent update failure is encountered, so we can re-start update process.