Class GammaTxnInteger

All Implemented Interfaces:
Lock, TxnInteger, TxnObject, MultiverseConstants, GammaConstants, GammaObject

public class GammaTxnInteger extends BaseGammaTxnRef implements TxnInteger
  • Constructor Details

    • GammaTxnInteger

      public GammaTxnInteger(int value)
    • GammaTxnInteger

      public GammaTxnInteger(GammaTxn tx)
    • GammaTxnInteger

      public GammaTxnInteger(GammaTxn tx, int value)
    • GammaTxnInteger

      public GammaTxnInteger(GammaStm stm)
    • GammaTxnInteger

      public GammaTxnInteger(GammaStm stm, int value)
  • Method Details

    • get

      public final int get()
      Description copied from interface: TxnInteger
      Gets the value using the provided txn.
      Specified by:
      get in interface TxnInteger
      Returns:
      the current value.
      See Also:
    • get

      public final int get(Txn tx)
      Description copied from interface: TxnInteger
      Gets the value using the provided txn.
      Specified by:
      get in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      Returns:
      the value stored in the ref.
    • get

      public final int get(GammaTxn tx)
    • getAndLock

      public int getAndLock(LockMode lockMode)
      Description copied from interface: TxnInteger
      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 the TxnThreadLocal.

      Specified by:
      getAndLock in interface TxnInteger
      Parameters:
      lockMode - the LockMode applied.
      Returns:
      the current value.
      See Also:
    • getAndLock

      public final int getAndLock(Txn tx, LockMode lockMode)
      Description copied from interface: TxnInteger
      Gets the value using the provided txn and acquired the lock with the specified LockMode.
      Specified by:
      getAndLock in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      lockMode - the LockMode used
      Returns:
      the value stored in the ref.
    • getAndLock

      public final int getAndLock(GammaTxn tx, LockMode lockMode)
    • set

      public final int set(int value)
      Description copied from interface: TxnInteger
      Sets the new value.

      This call lifts on the Txn stored in the TxnThreadLocal.

      Specified by:
      set in interface TxnInteger
      Parameters:
      value - the new value.
      Returns:
      the new value.
    • set

      public final int set(Txn tx, int value)
      Description copied from interface: TxnInteger
      Sets the new value using the provided txn.
      Specified by:
      set in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      value - the new value
      Returns:
      the old value
    • set

      public final int set(GammaTxn tx, int value)
    • setAndLock

      public final int setAndLock(int value, LockMode lockMode)
      Description copied from interface: TxnInteger
      Sets the new value and applies the lock.

      This call lifts on the Txn stored in the TxnThreadLocal.

      Specified by:
      setAndLock in interface TxnInteger
      Parameters:
      value - the new value.
      lockMode - the used LockMode.
      Returns:
      the new value.
    • setAndLock

      public final int setAndLock(Txn tx, int value, LockMode lockMode)
      Description copied from interface: TxnInteger
      Sets the new value using the provided txn.
      Specified by:
      setAndLock in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      value - the new value
      lockMode - the lockMode used.
      Returns:
      the old value
    • setAndLock

      public final int setAndLock(GammaTxn tx, int value, LockMode lockMode)
    • getAndSet

      public final int getAndSet(int value)
      Description copied from interface: TxnInteger
      Sets the value the value and returns the new value.

      This call lifts on the Txn stored in the TxnThreadLocal.

      Specified by:
      getAndSet in interface TxnInteger
      Parameters:
      value - the new value.
      Returns:
      the old value.
    • getAndSet

      public final int getAndSet(Txn tx, int value)
      Description copied from interface: TxnInteger
      Sets the value using the provided txn.
      Specified by:
      getAndSet in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      value - the new value.
      Returns:
      the old value.
    • getAndSet

      public final int getAndSet(GammaTxn tx, int value)
    • getAndSetAndLock

      public final int getAndSetAndLock(int value, LockMode lockMode)
      Description copied from interface: TxnInteger
      Sets the value, acquired the Lock with the specified Lockmode and returns the previous value.

      This call lifts on the Txn stored in the TxnThreadLocal.

      Specified by:
      getAndSetAndLock in interface TxnInteger
      Parameters:
      value - the new value.
      lockMode - the LockMode used.
      Returns:
      the old value.
    • getAndSetAndLock

      public final int getAndSetAndLock(Txn tx, int value, LockMode lockMode)
      Description copied from interface: TxnInteger
      Sets the value and acquired the Lock with the provided LockMode.

      This call lifts on the Txn stored in the TxnThreadLocal.

      Specified by:
      getAndSetAndLock in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      value - the new value.
      lockMode - the LockMode used.
      Returns:
      the old value.
    • getAndSetLock

      public final int getAndSetLock(GammaTxn tx, int value, LockMode lockMode)
    • atomicGet

      public final int atomicGet()
      Description copied from interface: TxnInteger
      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 the TxnInteger.atomicWeakGet().
      Specified by:
      atomicGet in interface TxnInteger
      Returns:
      the current value.
    • atomicWeakGet

      public final int atomicWeakGet()
      Description copied from interface: TxnInteger
      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 interface TxnInteger
      Returns:
      the value.
    • atomicSet

      public final int atomicSet(int newValue)
      Description copied from interface: TxnInteger
      Atomically sets the value and returns the new value. This method doesn't care about any running txns.
      Specified by:
      atomicSet in interface TxnInteger
      Parameters:
      newValue - the new value.
      Returns:
      the new value.
    • atomicGetAndSet

      public final int atomicGetAndSet(int newValue)
      Description copied from interface: TxnInteger
      Atomically sets the value and returns the previous value. This method doesn't care about any running txns.
      Specified by:
      atomicGetAndSet in interface TxnInteger
      Parameters:
      newValue - the new value.
      Returns:
      the old value.
    • commute

      public final void commute(IntFunction function)
      Description copied from interface: TxnInteger
      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 the TxnThreadLocal.

      Specified by:
      commute in interface TxnInteger
      Parameters:
      function - the function to apply to this reference.
    • commute

      public final void commute(Txn tx, IntFunction function)
      Description copied from interface: TxnInteger
      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 the TxnThreadLocal.

      Specified by:
      commute in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      function - the function to apply to this reference.
    • commute

      public final void commute(GammaTxn tx, IntFunction function)
    • atomicAlterAndGet

      public final int atomicAlterAndGet(IntFunction function)
      Description copied from interface: TxnInteger
      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 interface TxnInteger
      Parameters:
      function - the Function used
      Returns:
      the new value.
    • atomicGetAndAlter

      public final int atomicGetAndAlter(IntFunction function)
      Description copied from interface: TxnInteger
      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 interface TxnInteger
      Parameters:
      function - the Function used
      Returns:
      the old value.
    • atomicAlter

      private int atomicAlter(IntFunction function, boolean returnOld)
    • alterAndGet

      public final int alterAndGet(IntFunction function)
      Description copied from interface: TxnInteger
      Alters the value stored in this Ref using the provided function and returns the result.

      This call lifts on the Txn stored in the TxnThreadLocal.

      Specified by:
      alterAndGet in interface TxnInteger
      Parameters:
      function - the function that alters the value stored in this Ref.
      Returns:
      the new value.
    • alterAndGet

      public final int alterAndGet(Txn tx, IntFunction function)
      Description copied from interface: TxnInteger
      Alters the value stored in this Ref using the provided function and lifting on the provided txn.
      Specified by:
      alterAndGet in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      function - the function that alters the value stored in this Ref.
      Returns:
      the new value.
    • alterAndGet

      public final int alterAndGet(GammaTxn tx, IntFunction function)
    • getAndAlter

      public final int getAndAlter(IntFunction function)
      Description copied from interface: TxnInteger
      Alters the value stored in this Ref using the provided function amd returns the old value.

      This call lifts on the Txn stored in the TxnThreadLocal.

      Specified by:
      getAndAlter in interface TxnInteger
      Parameters:
      function - the function that alters the value stored in this Ref.
      Returns:
      the old value.
    • getAndAlter

      public final int getAndAlter(Txn tx, IntFunction function)
      Description copied from interface: TxnInteger
      Alters the value stored in this Ref using the function and returns the old value, using the provided txn.
      Specified by:
      getAndAlter in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      function - the function that alters the value stored in this Ref.
      Returns:
      the old value
    • getAndAlter

      public final int getAndAlter(GammaTxn tx, IntFunction function)
    • alter

      private int alter(GammaTxn tx, IntFunction function, boolean returnOld)
    • atomicCompareAndSet

      public final boolean atomicCompareAndSet(int expectedValue, int newValue)
      Description copied from interface: TxnInteger
      Executes a compare and set atomically. This method doesn't care about any running txns.
      Specified by:
      atomicCompareAndSet in interface TxnInteger
      Parameters:
      expectedValue - the expected value.
      newValue - the new value.
      Returns:
      true if the compareAndSwap was a success, false otherwise.
    • atomicGetAndIncrement

      public final int atomicGetAndIncrement(int amount)
      Description copied from interface: TxnInteger
      Atomically increments the value and returns the old value. This method doesn't care about any running txns.
      Specified by:
      atomicGetAndIncrement in interface TxnInteger
      Parameters:
      amount - the amount to increase with.
      Returns:
      the old value.
    • atomicIncrementAndGet

      public final int atomicIncrementAndGet(int amount)
      Description copied from interface: TxnInteger
      Atomically increments the value and returns the old value. This method doesn't care about any running txns.
      Specified by:
      atomicIncrementAndGet in interface TxnInteger
      Parameters:
      amount - the amount to increment with.
      Returns:
      the new value.
    • atomicIncrement

      private int atomicIncrement(int amount, boolean returnOld)
    • getAndIncrement

      public final int getAndIncrement(int amount)
      Description copied from interface: TxnInteger
      Increments the value and returns the old value.

      This call lifts on the Txn stored in the TxnThreadLocal.

      Specified by:
      getAndIncrement in interface TxnInteger
      Parameters:
      amount - the amount to increment with.
      Returns:
      the old value.
    • getAndIncrement

      public final int getAndIncrement(Txn tx, int amount)
      Description copied from interface: TxnInteger
      Increments the value and returns the old value using the provided txn.
      Specified by:
      getAndIncrement in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      amount - the amount to increment with.
      Returns:
      the old value.
    • getAndIncrement

      public final int getAndIncrement(GammaTxn tx, int amount)
    • incrementAndGet

      public final int incrementAndGet(int amount)
      Description copied from interface: TxnInteger
      Increments and gets the new value.

      This call lifts on the Txn stored in the TxnThreadLocal.

      Specified by:
      incrementAndGet in interface TxnInteger
      Parameters:
      amount - the amount to increment with.
      Returns:
      the new value.
    • incrementAndGet

      public final int incrementAndGet(Txn tx, int amount)
      Description copied from interface: TxnInteger
      Increments and gets the new value using the provided txn.
      Specified by:
      incrementAndGet in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      amount - the amount to increment with.
      Returns:
      the new value.
    • incrementAndGet

      public final int incrementAndGet(GammaTxn tx, int amount)
    • increment

      private int increment(GammaTxn tx, int amount, boolean returnOld)
    • increment

      public final void increment()
      Description copied from interface: TxnInteger
      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 the TxnThreadLocal.

      Specified by:
      increment in interface TxnInteger
    • increment

      public final void increment(Txn tx)
      Description copied from interface: TxnInteger
      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.

      Specified by:
      increment in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
    • increment

      public final void increment(int amount)
      Description copied from interface: TxnInteger
      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 the TxnThreadLocal.

      Specified by:
      increment in interface TxnInteger
      Parameters:
      amount - the amount to increase with
    • increment

      public final void increment(Txn tx, int amount)
      Description copied from interface: TxnInteger
      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.

      Specified by:
      increment in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      amount - the amount to increment with
    • increment

      public final void increment(GammaTxn tx, int amount)
    • decrement

      public final void decrement()
      Description copied from interface: TxnInteger
      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 the TxnThreadLocal.

      Specified by:
      decrement in interface TxnInteger
    • decrement

      public final void decrement(Txn tx)
      Description copied from interface: TxnInteger
      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.

      Specified by:
      decrement in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
    • decrement

      public final void decrement(int amount)
      Description copied from interface: TxnInteger
      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 the TxnThreadLocal.

      Specified by:
      decrement in interface TxnInteger
      Parameters:
      amount - the amount to decrement with
    • decrement

      public final void decrement(Txn tx, int amount)
      Description copied from interface: TxnInteger
      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.

      Specified by:
      decrement in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      amount - the amount to decrement with
    • await

      public final void await(int value)
      Description copied from interface: TxnInteger
      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 the TxnThreadLocal.

      Specified by:
      await in interface TxnInteger
      Parameters:
      value - the value to wait for.
    • await

      public final void await(Txn tx, int value)
      Description copied from interface: TxnInteger
      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.
      Specified by:
      await in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      value - the value to wait for.
    • await

      public final void await(GammaTxn tx, int value)
    • await

      public final void await(IntPredicate predicate)
      Description copied from interface: TxnInteger
      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 the TxnThreadLocal.

      Specified by:
      await in interface TxnInteger
      Parameters:
      predicate - the predicate to evaluate.
    • await

      public final void await(Txn tx, IntPredicate predicate)
      Description copied from interface: TxnInteger
      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.
      Specified by:
      await in interface TxnInteger
      Parameters:
      tx - the Txn used for this operation.
      predicate - the predicate to evaluate.
    • await

      public final void await(GammaTxn tx, IntPredicate 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 interface TxnObject
      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 the Txn on the TxnThreadLocal.
      Specified by:
      toString in interface TxnObject
      Overrides:
      toString in class Object
      Returns:
      the toString representation
    • toString

      public final String toString(Txn tx)
      Description copied from interface: TxnObject
      Returns a String representation of the object using the provided Txn.
      Specified by:
      toString in interface TxnObject
      Parameters:
      tx - the Txn used.
      Returns:
      the String representation of the object.
    • toString

      public final String toString(GammaTxn tx)
    • atomicToString

      public final String atomicToString()
      Description copied from interface: TxnObject
      Returns a String representation of the object using the provided transaction without looking at a TxnThreadLocal. The outputted value doesn't need to be consistent from some point in time, only a best effort is made.
      Specified by:
      atomicToString in interface TxnObject
      Returns:
      the String representation.