Class GammaTxnLong
- java.lang.Object
-
- org.multiverse.stms.gamma.transactionalobjects.AbstractGammaObject
-
- org.multiverse.stms.gamma.transactionalobjects.BaseGammaTxnRef
-
- org.multiverse.stms.gamma.transactionalobjects.GammaTxnLong
-
- All Implemented Interfaces:
Lock
,TxnLong
,TxnObject
,MultiverseConstants
,GammaConstants
,GammaObject
public class GammaTxnLong extends BaseGammaTxnRef implements TxnLong
- 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 GammaTxnLong(long value)
GammaTxnLong(GammaStm stm)
GammaTxnLong(GammaStm stm, long initialValue)
GammaTxnLong(GammaTxn tx)
GammaTxnLong(GammaTxn tx, long value)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description long
alterAndGet(LongFunction function)
Alters the value stored in this Ref using the provided function and returns the result.long
alterAndGet(Txn tx, LongFunction function)
Alters the value stored in this Ref using the provided function and lifting on the provided txn.long
alterAndGet(GammaTxn tx, LongFunction function)
long
atomicAlterAndGet(LongFunction function)
Atomically applies the function to the current value in this ref and returns the new value.boolean
atomicCompareAndSet(long expectedValue, long newValue)
Executes a compare and set atomically.long
atomicGet()
Atomically gets the value.long
atomicGetAndAlter(LongFunction function)
Atomically applies the function to alter the value stored in this ref and returns the old value.long
atomicGetAndIncrement(long amount)
Atomically increments the value and returns the old value.long
atomicGetAndSet(long newValue)
Atomically sets the value and returns the previous value.long
atomicIncrementAndGet(long amount)
Atomically increments the value and returns the old value.long
atomicSet(long 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
.long
atomicWeakGet()
Atomically gets the value without providing any ordering guarantees.void
await(long value)
Awaits for the value to become the given value.void
await(LongPredicate predicate)
Awaits until the predicate holds.void
await(Txn tx, long value)
Awaits for the reference to become the given value.void
await(Txn tx, LongPredicate predicate)
Awaits until the predicate holds using the provided txn.void
await(GammaTxn tx, long value)
void
await(GammaTxn tx, LongPredicate predicate)
void
commute(LongFunction function)
Applies the function on the ref in a commuting manner.void
commute(Txn tx, LongFunction function)
Applies the function on the ref in a commuting manner.void
commute(GammaTxn tx, LongFunction function)
void
decrement()
Decrements the value by one.void
decrement(long amount)
Decrements the value by the given amount.void
decrement(Txn tx)
Decrements the value by one using the provided txn.void
decrement(Txn tx, long amount)
Decrements the value by the given amount using the provided txn.long
get()
Gets the value using the provided txn.long
get(Txn tx)
Gets the value using the provided txn.long
get(GammaTxn tx)
long
getAndAlter(LongFunction function)
Alters the value stored in this Ref using the provided function amd returns the old value.long
getAndAlter(Txn tx, LongFunction function)
Alters the value stored in this Ref using the function and returns the old value, using the provided txn.long
getAndAlter(GammaTxn tx, LongFunction function)
long
getAndIncrement(long amount)
Increments the value and returns the old value.long
getAndIncrement(Txn tx, long amount)
Increments the value and returns the old value using the provided txn.long
getAndIncrement(GammaTxn tx, long amount)
long
getAndLock(LockMode lockMode)
Gets the value and applies the lock.long
getAndLock(Txn tx, LockMode lockMode)
Gets the value using the provided txn and acquired the lock with the specified LockMode.long
getAndLock(GammaTxn tx, LockMode lockMode)
long
getAndSet(long value)
Sets the value the value and returns the new value.long
getAndSet(Txn tx, long value)
Sets the value using the provided txn.long
getAndSet(GammaTxn tx, long value)
long
getAndSetAndLock(long value, LockMode lockMode)
Sets the value, acquired the Lock with the specified Lockmode and returns the previous value.long
getAndSetAndLock(Txn tx, long value, LockMode lockMode)
Sets the value and acquired the Lock with the provided LockMode.long
getAndSetLock(GammaTxn tx, long value, LockMode lockMode)
void
increment()
Increments the value by one.void
increment(long amount)
Increments the value by the given amount.void
increment(Txn tx)
Increments the value by one using the provided txn.void
increment(Txn tx, long amount)
Increments the value by the given amount using the provided txn.void
increment(GammaTxn tx)
long
incrementAndGet(long amount)
Increments and gets the new value.long
incrementAndGet(Txn tx, long amount)
Increments and gets the new value using the provided txn.long
incrementAndGet(GammaTxn tx, long amount)
long
set(long value)
Sets the new value.long
set(Txn tx, long value)
Sets the new value using the provided txn.long
set(GammaTxn tx, long value)
long
setAndLock(long value, LockMode lockMode)
Sets the new value and applies the lock.long
setAndLock(Txn tx, long value, LockMode lockMode)
Sets the new value using the provided txn.long
setAndLock(GammaTxn tx, long 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 long get()
Description copied from interface:TxnLong
Gets the value using the provided txn.- Specified by:
get
in interfaceTxnLong
- Returns:
- the current value.
- See Also:
TxnLong.atomicGet()
-
get
public final long get(Txn tx)
Description copied from interface:TxnLong
Gets the value using the provided txn.
-
get
public final long get(GammaTxn tx)
-
getAndLock
public final long getAndLock(LockMode lockMode)
Description copied from interface:TxnLong
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 interfaceTxnLong
- Parameters:
lockMode
- the LockMode applied.- Returns:
- the current value.
- See Also:
TxnLong.atomicGet()
-
getAndLock
public final long getAndLock(Txn tx, LockMode lockMode)
Description copied from interface:TxnLong
Gets the value using the provided txn and acquired the lock with the specified LockMode.- Specified by:
getAndLock
in interfaceTxnLong
- Parameters:
tx
- theTxn
used for this operation.lockMode
- the LockMode used- Returns:
- the value stored in the ref.
-
set
public final long set(long value)
Description copied from interface:TxnLong
Sets the new value.This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
set
public final long set(Txn tx, long value)
Description copied from interface:TxnLong
Sets the new value using the provided txn.
-
set
public final long set(GammaTxn tx, long value)
-
setAndLock
public final long setAndLock(long value, LockMode lockMode)
Description copied from interface:TxnLong
Sets the new value and applies the lock.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Specified by:
setAndLock
in interfaceTxnLong
- Parameters:
value
- the new value.lockMode
- the used LockMode.- Returns:
- the new value.
-
setAndLock
public final long setAndLock(Txn tx, long value, LockMode lockMode)
Description copied from interface:TxnLong
Sets the new value using the provided txn.- Specified by:
setAndLock
in interfaceTxnLong
- Parameters:
tx
- theTxn
used for this operation.value
- the new valuelockMode
- the lockMode used.- Returns:
- the old value
-
getAndSet
public final long getAndSet(long value)
Description copied from interface:TxnLong
Sets the value the value and returns the new value.This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
getAndSet
public final long getAndSet(Txn tx, long value)
Description copied from interface:TxnLong
Sets the value using the provided txn.
-
getAndSet
public final long getAndSet(GammaTxn tx, long value)
-
getAndSetAndLock
public final long getAndSetAndLock(long value, LockMode lockMode)
Description copied from interface:TxnLong
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 interfaceTxnLong
- Parameters:
value
- the new value.lockMode
- the LockMode used.- Returns:
- the old value.
-
getAndSetAndLock
public final long getAndSetAndLock(Txn tx, long value, LockMode lockMode)
Description copied from interface:TxnLong
Sets the value and acquired the Lock with the provided LockMode.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Specified by:
getAndSetAndLock
in interfaceTxnLong
- Parameters:
tx
- theTxn
used for this operation.value
- the new value.lockMode
- the LockMode used.- Returns:
- the old value.
-
atomicGet
public final long atomicGet()
Description copied from interface:TxnLong
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 theTxnLong.atomicWeakGet()
.
-
atomicWeakGet
public final long atomicWeakGet()
Description copied from interface:TxnLong
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 interfaceTxnLong
- Returns:
- the value.
-
atomicSet
public final long atomicSet(long newValue)
Description copied from interface:TxnLong
Atomically sets the value and returns the new value. This method doesn't care about any running txns.
-
atomicGetAndSet
public final long atomicGetAndSet(long newValue)
Description copied from interface:TxnLong
Atomically sets the value and returns the previous value. This method doesn't care about any running txns.- Specified by:
atomicGetAndSet
in interfaceTxnLong
- Parameters:
newValue
- the new value.- Returns:
- the old value.
-
commute
public final void commute(LongFunction function)
Description copied from interface:TxnLong
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, LongFunction function)
Description copied from interface:TxnLong
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(GammaTxn tx, LongFunction function)
-
atomicAlterAndGet
public final long atomicAlterAndGet(LongFunction function)
Description copied from interface:TxnLong
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 interfaceTxnLong
- Parameters:
function
- the Function used- Returns:
- the new value.
-
alterAndGet
public final long alterAndGet(LongFunction function)
Description copied from interface:TxnLong
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 interfaceTxnLong
- Parameters:
function
- the function that alters the value stored in this Ref.- Returns:
- the new value.
-
alterAndGet
public final long alterAndGet(Txn tx, LongFunction function)
Description copied from interface:TxnLong
Alters the value stored in this Ref using the provided function and lifting on the provided txn.- Specified by:
alterAndGet
in interfaceTxnLong
- Parameters:
tx
- theTxn
used for this operation.function
- the function that alters the value stored in this Ref.- Returns:
- the new value.
-
alterAndGet
public final long alterAndGet(GammaTxn tx, LongFunction function)
-
atomicGetAndAlter
public final long atomicGetAndAlter(LongFunction function)
Description copied from interface:TxnLong
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 interfaceTxnLong
- Parameters:
function
- the Function used- Returns:
- the old value.
-
getAndAlter
public final long getAndAlter(LongFunction function)
Description copied from interface:TxnLong
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 interfaceTxnLong
- Parameters:
function
- the function that alters the value stored in this Ref.- Returns:
- the old value.
-
getAndAlter
public final long getAndAlter(Txn tx, LongFunction function)
Description copied from interface:TxnLong
Alters the value stored in this Ref using the function and returns the old value, using the provided txn.- Specified by:
getAndAlter
in interfaceTxnLong
- Parameters:
tx
- theTxn
used for this operation.function
- the function that alters the value stored in this Ref.- Returns:
- the old value
-
getAndAlter
public final long getAndAlter(GammaTxn tx, LongFunction function)
-
atomicCompareAndSet
public final boolean atomicCompareAndSet(long expectedValue, long newValue)
Description copied from interface:TxnLong
Executes a compare and set atomically. This method doesn't care about any running txns.- Specified by:
atomicCompareAndSet
in interfaceTxnLong
- Parameters:
expectedValue
- the expected value.newValue
- the new value.- Returns:
- true if the compareAndSwap was a success, false otherwise.
-
atomicGetAndIncrement
public final long atomicGetAndIncrement(long amount)
Description copied from interface:TxnLong
Atomically increments the value and returns the old value. This method doesn't care about any running txns.- Specified by:
atomicGetAndIncrement
in interfaceTxnLong
- Parameters:
amount
- the amount to increase with.- Returns:
- the old value.
-
getAndIncrement
public final long getAndIncrement(long amount)
Description copied from interface:TxnLong
Increments the value and returns the old value.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Specified by:
getAndIncrement
in interfaceTxnLong
- Parameters:
amount
- the amount to increment with.- Returns:
- the old value.
-
getAndIncrement
public final long getAndIncrement(Txn tx, long amount)
Description copied from interface:TxnLong
Increments the value and returns the old value using the provided txn.- Specified by:
getAndIncrement
in interfaceTxnLong
- Parameters:
tx
- theTxn
used for this operation.amount
- the amount to increment with.- Returns:
- the old value.
-
getAndIncrement
public final long getAndIncrement(GammaTxn tx, long amount)
-
atomicIncrementAndGet
public final long atomicIncrementAndGet(long amount)
Description copied from interface:TxnLong
Atomically increments the value and returns the old value. This method doesn't care about any running txns.- Specified by:
atomicIncrementAndGet
in interfaceTxnLong
- Parameters:
amount
- the amount to increment with.- Returns:
- the new value.
-
incrementAndGet
public final long incrementAndGet(long amount)
Description copied from interface:TxnLong
Increments and gets the new value.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Specified by:
incrementAndGet
in interfaceTxnLong
- Parameters:
amount
- the amount to increment with.- Returns:
- the new value.
-
incrementAndGet
public final long incrementAndGet(Txn tx, long amount)
Description copied from interface:TxnLong
Increments and gets the new value using the provided txn.- Specified by:
incrementAndGet
in interfaceTxnLong
- Parameters:
tx
- theTxn
used for this operation.amount
- the amount to increment with.- Returns:
- the new value.
-
incrementAndGet
public final long incrementAndGet(GammaTxn tx, long amount)
-
increment
public final void increment()
Description copied from interface:TxnLong
Increments the value by one.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
increment
public final void increment(Txn tx)
Description copied from interface:TxnLong
Increments the value by one using the provided txn.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
-
increment
public final void increment(GammaTxn tx)
-
increment
public final void increment(long amount)
Description copied from interface:TxnLong
Increments the value by the given amount.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
increment
public final void increment(Txn tx, long amount)
Description copied from interface:TxnLong
Increments the value by the given amount using the provided txn.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
-
decrement
public final void decrement()
Description copied from interface:TxnLong
Decrements the value by one.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
decrement
public final void decrement(Txn tx)
Description copied from interface:TxnLong
Decrements the value by one using the provided txn.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
-
decrement
public final void decrement(long amount)
Description copied from interface:TxnLong
Decrements the value by the given amount.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
This call lifts on the
Txn
stored in theTxnThreadLocal
.
-
decrement
public final void decrement(Txn tx, long amount)
Description copied from interface:TxnLong
Decrements the value by the given amount using the provided txn.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
-
await
public final void await(long value)
Description copied from interface:TxnLong
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, long value)
Description copied from interface:TxnLong
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(GammaTxn tx, long value)
-
await
public final void await(LongPredicate predicate)
Description copied from interface:TxnLong
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, LongPredicate predicate)
Description copied from interface:TxnLong
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.
-
await
public final void await(GammaTxn tx, LongPredicate predicate)
-
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.
-
-