Class GammaTxnRef<E>
- java.lang.Object
-
- org.multiverse.stms.gamma.transactionalobjects.AbstractGammaObject
-
- org.multiverse.stms.gamma.transactionalobjects.BaseGammaTxnRef
-
- org.multiverse.stms.gamma.transactionalobjects.GammaTxnRef<E>
-
- Type Parameters:
E
-
- All Implemented Interfaces:
Lock
,TxnRef<E>
,TxnObject
,MultiverseConstants
,GammaConstants
,GammaObject
public class GammaTxnRef<E> extends BaseGammaTxnRef implements TxnRef<E>
- Author:
- Peter Veentjer.
-
-
Field Summary
-
Fields inherited from class org.multiverse.stms.gamma.transactionalobjects.BaseGammaTxnRef
long_value, ref_value, type
-
Fields inherited from class org.multiverse.stms.gamma.transactionalobjects.AbstractGammaObject
___unsafe, identityHashCode, listeners, listenersOffset, MASK_OREC_EXCLUSIVELOCK, MASK_OREC_READBIASED, MASK_OREC_READLOCKS, MASK_OREC_READONLY_COUNT, MASK_OREC_SURPLUS, MASK_OREC_UPDATELOCK, orec, stm, valueOffset, version
-
Fields inherited from interface org.multiverse.stms.gamma.GammaConstants
FAILURE, MASK_CONFLICT, MASK_SUCCESS, MASK_UNREGISTERED, REGISTRATION_DONE, REGISTRATION_NONE, REGISTRATION_NOT_NEEDED, TRANLOCAL_COMMUTING, TRANLOCAL_CONSTRUCTING, TRANLOCAL_READ, TRANLOCAL_WRITE, TRANSACTIONTYPE_FAT_FIXED_LENGTH, TRANSACTIONTYPE_FAT_MONO, TRANSACTIONTYPE_FAT_VARIABLE_LENGTH, TRANSACTIONTYPE_LEAN_FIXED_LENGTH, TRANSACTIONTYPE_LEAN_MONO, TX_ABORTED, TX_ACTIVE, TX_COMMITTED, TX_PREPARED, TYPE_BOOLEAN, TYPE_DOUBLE, TYPE_INT, TYPE_LONG, TYPE_REF, VERSION_UNCOMMITTED
-
Fields inherited from interface org.multiverse.MultiverseConstants
LOCKMODE_EXCLUSIVE, LOCKMODE_NONE, LOCKMODE_READ, LOCKMODE_WRITE, SHAKE_BUGS, SPIN_YIELD, TRACING_ENABLED
-
-
Constructor Summary
Constructors Constructor Description GammaTxnRef(E value)
GammaTxnRef(GammaStm stm)
GammaTxnRef(GammaStm stm, E value)
GammaTxnRef(GammaTxn tx)
GammaTxnRef(GammaTxn tx, E value)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description E
alterAndGet(Function<E> function)
Alters the value stored in this Ref using the provided function and returns the result.E
alterAndGet(Txn tx, Function<E> function)
Alters the value stored in this Ref using the provided function and lifting on the provided txn.E
alterAndGet(GammaTxn tx, Function<E> function)
E
atomicAlterAndGet(Function<E> function)
Atomically applies the function to the current value in this ref and returns the new value.boolean
atomicCompareAndSet(E expectedValue, E newValue)
Executes a compare and set atomically.E
atomicGet()
Atomically gets the value.E
atomicGetAndAlter(Function<E> function)
Atomically applies the function to alter the value stored in this ref and returns the old value.E
atomicGetAndSet(E newValue)
Atomically sets the value and returns the previous value.boolean
atomicIsNull()
Atomically check if the current value is null.E
atomicSet(E newValue)
Atomically sets the value and returns the new value.String
atomicToString()
Returns a String representation of the object using the provided transaction without looking at aTxnThreadLocal
.E
atomicWeakGet()
Atomically gets the value without providing any ordering guarantees.void
await(E value)
Awaits for the value to become the given value.void
await(Predicate<E> predicate)
Awaits until the predicate holds.void
await(Txn tx, E value)
Awaits for the reference to become the given value.void
await(Txn tx, Predicate<E> predicate)
Awaits until the predicate holds using the provided txn.void
await(GammaTxn tx, E value)
void
await(GammaTxn tx, Predicate<E> predicate)
E
awaitNotNullAndGet()
Awaits for the value to become not null.E
awaitNotNullAndGet(Txn tx)
Awaits for the value to become not null using the provided txn.E
awaitNotNullAndGet(GammaTxn tx)
void
awaitNull()
Awaits for the value to become null.void
awaitNull(Txn tx)
Awaits for the value to become not null using the provided txn.void
awaitNull(GammaTxn tx)
void
commute(Function<E> function)
Applies the function on the ref in a commuting manner.void
commute(Txn tx, Function<E> function)
Applies the function on the ref in a commuting manner.void
commute(GammaTxn tx, Function<E> function)
E
get()
Gets the value using the provided txn.E
get(Txn tx)
Gets the value using the provided txn.E
get(GammaTxn tx)
E
getAndAlter(Function<E> function)
Alters the value stored in this Ref using the provided function amd returns the old value.E
getAndAlter(Txn tx, Function<E> function)
Alters the value stored in this Ref using the function and returns the old value, using the provided txn.E
getAndAlter(GammaTxn tx, Function<E> function)
E
getAndLock(LockMode lockMode)
Gets the value and applies the lock.E
getAndLock(Txn tx, LockMode lockMode)
Gets the value using the provided txn and acquired the lock with the specified LockMode.E
getAndLock(GammaTxn tx, LockMode lockMode)
E
getAndSet(E value)
Sets the value the value and returns the new value.E
getAndSet(Txn tx, E value)
Sets the value using the provided txn.E
getAndSet(GammaTxn tx, E value)
E
getAndSetAndLock(E value, LockMode lockMode)
Sets the value, acquired the Lock with the specified Lockmode and returns the previous value.E
getAndSetAndLock(Txn tx, E value, LockMode lockMode)
Sets the value and acquired the Lock with the provided LockMode.E
getAndSetAndLock(GammaTxn tx, E value, LockMode lockMode)
boolean
isNull()
Checks if the current value is null.boolean
isNull(Txn tx)
Checks if the current value is null using the provided txn.boolean
isNull(GammaTxn tx)
E
set(E value)
Sets the new value.E
set(Txn tx, E value)
Sets the new value using the provided txn.E
set(GammaTxn tx, E value)
E
setAndLock(E value, LockMode lockMode)
Sets the new value and applies the lock.E
setAndLock(Txn tx, E value, LockMode lockMode)
Sets the new value using the provided txn.E
setAndLock(GammaTxn tx, E value, LockMode lockMode)
String
toDebugString()
Returns a debug representation of the TxnObject.String
toString()
Returns a String representation of the Object using theTxn
on theTxnThreadLocal
.String
toString(Txn tx)
Returns a String representation of the object using the providedTxn
.String
toString(GammaTxn tx)
-
Methods inherited from class org.multiverse.stms.gamma.transactionalobjects.BaseGammaTxnRef
acquire, acquire, acquire, arriveAndExclusiveLockOrBackoff, atomicCompareAndSetLong, atomicGetLong, atomicObjectGet, atomicSetLong, atomicSetObject, commit, ensure, ensure, ensure, flattenCommute, getLong, getObject, hasReadConflict, leanCommit, load, openForCommute, openForCommute, openForCommute, openForCommute, openForConstruction, openForConstruction, openForConstruction, openForConstruction, openForRead, openForRead, openForRead, openForRead, openForRead, openForRead, openForWrite, openForWrite, openForWrite, openForWrite, openForWrite, openForWrite, prepare, registerChangeListener, releaseAfterFailure, releaseAfterReading, releaseAfterUpdate, setLong, setObject, tryLockAndCheckConflict
-
Methods inherited from class org.multiverse.stms.gamma.transactionalobjects.AbstractGammaObject
___removeListenersAfterWrite, ___toOrecString, arrive, arriveAndExclusiveLock, arriveAndLock, atomicGetLockMode, atomicGetLockModeAsInt, departAfterFailure, departAfterFailureAndUnlock, departAfterReading, departAfterReadingAndUnlock, departAfterUpdateAndUnlock, getLock, getLockMode, getLockMode, getLockMode, getReadBiasedThreshold, getReadLockCount, getReadLockCount, getReadonlyCount, getReadonlyCount, getStm, getSurplus, getSurplus, getVersion, hasAnyLock, hasExclusiveLock, hasExclusiveLock, hasWriteLock, hasWriteLock, hasWriteOrExclusiveLock, identityHashCode, isReadBiased, isReadBiased, lockAfterArrive, setExclusiveLock, setIsReadBiased, setReadLockCount, setReadonlyCount, setSurplus, setWriteLock, unlockByUnregistered, upgradeReadLock, upgradeWriteLock, waitForExclusiveLockToBecomeFree
-
-
-
-
Method Detail
-
get
public final E get()
Description copied from interface:TxnRef
Gets the value using the provided txn.- Specified by:
get
in interfaceTxnRef<E>
- Returns:
- the current value.
- See Also:
TxnRef.atomicGet()
-
get
public final E get(Txn tx)
Description copied from interface:TxnRef
Gets the value using the provided txn.
-
getAndLock
public final E getAndLock(LockMode lockMode)
Description copied from interface:TxnRef
Gets the value and applies the lock. If the current lockMode already is higher than the provided lockMode the Lock is not upgraded to a higher value.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Specified by:
getAndLock
in interfaceTxnRef<E>
- Parameters:
lockMode
- the LockMode applied.- Returns:
- the current value.
- See Also:
TxnRef.atomicGet()
-
getAndLock
public final E getAndLock(Txn tx, LockMode lockMode)
Description copied from interface:TxnRef
Gets the value using the provided txn and acquired the lock with the specified LockMode.- Specified by:
getAndLock
in interfaceTxnRef<E>
- Parameters:
tx
- theTxn
used for this operation.lockMode
- the LockMode used- Returns:
- the value stored in the ref.
-
set
public final E set(E value)
Description copied from interface:TxnRef
Sets the new value.This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
set
public final E set(Txn tx, E value)
Description copied from interface:TxnRef
Sets the new value using the provided txn.
-
setAndLock
public final E setAndLock(E value, LockMode lockMode)
Description copied from interface:TxnRef
Sets the new value and applies the lock.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Specified by:
setAndLock
in interfaceTxnRef<E>
- Parameters:
value
- the new value.lockMode
- the used LockMode.- Returns:
- the new value.
-
setAndLock
public final E setAndLock(Txn tx, E value, LockMode lockMode)
Description copied from interface:TxnRef
Sets the new value using the provided txn.- Specified by:
setAndLock
in interfaceTxnRef<E>
- Parameters:
tx
- theTxn
used for this operation.value
- the new valuelockMode
- the lockMode used.- Returns:
- the old value
-
getAndSet
public final E getAndSet(E value)
Description copied from interface:TxnRef
Sets the value the value and returns the new value.This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
getAndSet
public final E getAndSet(Txn tx, E value)
Description copied from interface:TxnRef
Sets the value using the provided txn.
-
getAndSetAndLock
public final E getAndSetAndLock(E value, LockMode lockMode)
Description copied from interface:TxnRef
Sets the value, acquired the Lock with the specified Lockmode and returns the previous value.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Specified by:
getAndSetAndLock
in interfaceTxnRef<E>
- Parameters:
value
- the new value.lockMode
- the LockMode used.- Returns:
- the old value.
-
getAndSetAndLock
public final E getAndSetAndLock(Txn tx, E value, LockMode lockMode)
Description copied from interface:TxnRef
Sets the value and acquired the Lock with the provided LockMode.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Specified by:
getAndSetAndLock
in interfaceTxnRef<E>
- Parameters:
tx
- theTxn
used for this operation.value
- the new value.lockMode
- the LockMode used.- Returns:
- the old value.
-
atomicGet
public final E atomicGet()
Description copied from interface:TxnRef
Atomically gets the value. The value could be stale as soon as it is returned. This method doesn't care about any running txns. It could be that this call fails e.g. when a ref is locked. If you don't care about correct orderings, see theTxnRef.atomicWeakGet()
.
-
atomicWeakGet
public final E atomicWeakGet()
Description copied from interface:TxnRef
Atomically gets the value without providing any ordering guarantees. This method is extremely cheap and will never fail. So even if the ref is privatized, this call will still complete.It is the best method to call if you just want to get the current value stored.
- Specified by:
atomicWeakGet
in interfaceTxnRef<E>
- Returns:
- the value.
-
atomicSet
public final E atomicSet(E newValue)
Description copied from interface:TxnRef
Atomically sets the value and returns the new value. This method doesn't care about any running txns.
-
atomicGetAndSet
public final E atomicGetAndSet(E newValue)
Description copied from interface:TxnRef
Atomically sets the value and returns the previous value. This method doesn't care about any running txns.- Specified by:
atomicGetAndSet
in interfaceTxnRef<E>
- Parameters:
newValue
- the new value.- Returns:
- the old value.
-
commute
public final void commute(Function<E> function)
Description copied from interface:TxnRef
Applies the function on the ref in a commuting manner. So if there are no dependencies, the function will commute. If somehow there already is a dependency or a dependency is formed on the result of the commuting function, the function will not commute and will be exactly the same as an alter.This is different than the behavior in Clojure where the commute will be re-applied at the end of the txn, even though some dependency is introduced, which can lead to inconsistencies.
This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
commute
public final void commute(Txn tx, Function<E> function)
Description copied from interface:TxnRef
Applies the function on the ref in a commuting manner. So if there are no dependencies, the function will commute. If somehow there already is a dependency or a dependency is formed on the result of the commuting function, the function will not commute and will be exactly the same as an alter.This is different than the behavior in Clojure where the commute will be re-applied at the end of the txn, even though some dependency is introduced, which can lead to inconsistencies.
This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
atomicAlterAndGet
public final E atomicAlterAndGet(Function<E> function)
Description copied from interface:TxnRef
Atomically applies the function to the current value in this ref and returns the new value. This method doesn't care about any running txns.- Specified by:
atomicAlterAndGet
in interfaceTxnRef<E>
- Parameters:
function
- the Function used- Returns:
- the new value.
-
atomicGetAndAlter
public final E atomicGetAndAlter(Function<E> function)
Description copied from interface:TxnRef
Atomically applies the function to alter the value stored in this ref and returns the old value. This method doesn't care about any running txns.- Specified by:
atomicGetAndAlter
in interfaceTxnRef<E>
- Parameters:
function
- the Function used- Returns:
- the old value.
-
alterAndGet
public final E alterAndGet(Function<E> function)
Description copied from interface:TxnRef
Alters the value stored in this Ref using the provided function and returns the result.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Specified by:
alterAndGet
in interfaceTxnRef<E>
- Parameters:
function
- the function that alters the value stored in this Ref.- Returns:
- the new value.
-
alterAndGet
public final E alterAndGet(Txn tx, Function<E> function)
Description copied from interface:TxnRef
Alters the value stored in this Ref using the provided function and lifting on the provided txn.- Specified by:
alterAndGet
in interfaceTxnRef<E>
- Parameters:
tx
- theTxn
used for this operation.function
- the function that alters the value stored in this Ref.- Returns:
- the new value.
-
getAndAlter
public final E getAndAlter(Function<E> function)
Description copied from interface:TxnRef
Alters the value stored in this Ref using the provided function amd returns the old value.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Specified by:
getAndAlter
in interfaceTxnRef<E>
- Parameters:
function
- the function that alters the value stored in this Ref.- Returns:
- the old value.
-
getAndAlter
public final E getAndAlter(Txn tx, Function<E> function)
Description copied from interface:TxnRef
Alters the value stored in this Ref using the function and returns the old value, using the provided txn.- Specified by:
getAndAlter
in interfaceTxnRef<E>
- Parameters:
tx
- theTxn
used for this operation.function
- the function that alters the value stored in this Ref.- Returns:
- the old value
-
atomicCompareAndSet
public final boolean atomicCompareAndSet(E expectedValue, E newValue)
Description copied from interface:TxnRef
Executes a compare and set atomically. This method doesn't care about any running txns.- Specified by:
atomicCompareAndSet
in interfaceTxnRef<E>
- Parameters:
expectedValue
- the expected value.newValue
- the new value.- Returns:
- true if the compareAndSwap was a success, false otherwise.
-
isNull
public final boolean isNull()
Description copied from interface:TxnRef
Checks if the current value is null.This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
isNull
public final boolean isNull(Txn tx)
Description copied from interface:TxnRef
Checks if the current value is null using the provided txn.
-
isNull
public final boolean isNull(GammaTxn tx)
-
atomicIsNull
public final boolean atomicIsNull()
Description copied from interface:TxnRef
Atomically check if the current value is null. This method doesn't care about any running txns.- Specified by:
atomicIsNull
in interfaceTxnRef<E>
- Returns:
- true if null, false otherwise.
-
awaitNotNullAndGet
public final E awaitNotNullAndGet()
Description copied from interface:TxnRef
Awaits for the value to become not null. If the value already is not null, this call returns the stored value. If the value is null, a retry is done.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Specified by:
awaitNotNullAndGet
in interfaceTxnRef<E>
- Returns:
- the stored value.
-
awaitNotNullAndGet
public final E awaitNotNullAndGet(Txn tx)
Description copied from interface:TxnRef
Awaits for the value to become not null using the provided txn. If the value already is not null, this call returns the stored value. If the value is null, a retry is done.- Specified by:
awaitNotNullAndGet
in interfaceTxnRef<E>
- Parameters:
tx
- theTxn
used for this operation.- Returns:
- the stored value.
-
awaitNull
public final void awaitNull()
Description copied from interface:TxnRef
Awaits for the value to become null. If the value already is null, this call continues. If the reference is not null, a retry is done.This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
awaitNull
public final void awaitNull(Txn tx)
Description copied from interface:TxnRef
Awaits for the value to become not null using the provided txn. If the value already is null, this call continues. If the value is not null, a retry is done.
-
awaitNull
public final void awaitNull(GammaTxn tx)
-
await
public final void await(E value)
Description copied from interface:TxnRef
Awaits for the value to become the given value. If the value already has the the specified value, the call continues, else a retry is done.This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
await
public final void await(Txn tx, E value)
Description copied from interface:TxnRef
Awaits for the reference to become the given value. If the value already has the the specified value, the call continues, else a retry is done.
-
await
public final void await(Predicate<E> predicate)
Description copied from interface:TxnRef
Awaits until the predicate holds. If the value already evaluates to true, the call continues else a retry is done. If the predicate throws an exception, the txn is aborted and the throwable is propagated.This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
await
public final void await(Txn tx, Predicate<E> predicate)
Description copied from interface:TxnRef
Awaits until the predicate holds using the provided txn. If the value already evaluates to true, the call continues else a retry is done. If the predicate throws an exception, the txn is aborted and the throwable is propagated.
-
toDebugString
public final String toDebugString()
Description copied from interface:TxnObject
Returns a debug representation of the TxnObject. The data used doesn't have to be consistent, it is a best effort. This method doesn't rely on a running transaction.- Specified by:
toDebugString
in interfaceTxnObject
- Returns:
- the debug representation of the TxnObject.
-
toString
public final String toString()
Description copied from interface:TxnObject
Returns a String representation of the Object using theTxn
on theTxnThreadLocal
.
-
toString
public final String toString(Txn tx)
Description copied from interface:TxnObject
Returns a String representation of the object using the providedTxn
.
-
atomicToString
public final String atomicToString()
Description copied from interface:TxnObject
Returns a String representation of the object using the provided transaction without looking at aTxnThreadLocal
. The outputted value doesn't need to be consistent from some point in time, only a best effort is made.- Specified by:
atomicToString
in interfaceTxnObject
- Returns:
- the String representation.
-
-