package org.multiverse.api.callables;
import org.multiverse.api.Txn;
import org.multiverse.api.TxnExecutor;
/**
* A transactional callable contains the logic that needs to be executed transactionally and normally is executed by the
* {@link TxnExecutor}.
*
* This transactional callable is optimized for retuning a primitive type: double. Using this TxnDoubleCallable instead of
* the {@link TxnCallable} is that no object wrapper needs to be created and there is no reason to deal with a potential
* null value.
*
* @author Peter Veentjer.
*/
public interface TxnDoubleCallable{
/**
* Executes the callable.
*
* @param txn the Transaction. Depending on the txn {@link org.multiverse.api.PropagationLevel}, this could
* be null.
* @return the result of the execution.
*/
double call(Txn txn)throws Exception;
}