class Concurrent::MutexAtomicFixnum

@!macro atomic_fixnum @!visibility private @!macro internal_implementation_note

Constants

MAX_VALUE
MIN_VALUE

stackoverflow.com/questions/535721/ruby-max-integer

Public Class Methods

new(initial = 0) click to toggle source

@!macro atomic_fixnum_method_initialize

Calls superclass method
# File lib/concurrent/atomic/mutex_atomic_fixnum.rb, line 15
def initialize(initial = 0)
  super()
  synchronize { ns_initialize(initial) }
end

Public Instance Methods

compare_and_set(expect, update) click to toggle source

@!macro atomic_fixnum_method_compare_and_set

# File lib/concurrent/atomic/mutex_atomic_fixnum.rb, line 45
def compare_and_set(expect, update)
  synchronize do
    if @value == expect.to_i
      @value = update.to_i
      true
    else
      false
    end
  end
end
decrement(delta = 1) click to toggle source

@!macro atomic_fixnum_method_decrement

# File lib/concurrent/atomic/mutex_atomic_fixnum.rb, line 38
def decrement(delta = 1)
  synchronize { ns_set(@value - delta.to_i) }
end
Also aliased as: down
down(delta = 1)
Alias for: decrement
increment(delta = 1) click to toggle source

@!macro atomic_fixnum_method_increment

# File lib/concurrent/atomic/mutex_atomic_fixnum.rb, line 31
def increment(delta = 1)
  synchronize { ns_set(@value + delta.to_i) }
end
Also aliased as: up
up(delta = 1)
Alias for: increment
update() { |value| ... } click to toggle source

@!macro atomic_fixnum_method_update

# File lib/concurrent/atomic/mutex_atomic_fixnum.rb, line 57
def update
  synchronize do
    @value = yield @value
  end
end
value() click to toggle source

@!macro atomic_fixnum_method_value_get

# File lib/concurrent/atomic/mutex_atomic_fixnum.rb, line 21
def value
  synchronize { @value }
end
value=(value) click to toggle source

@!macro atomic_fixnum_method_value_set

# File lib/concurrent/atomic/mutex_atomic_fixnum.rb, line 26
def value=(value)
  synchronize { ns_set(value) }
end

Protected Instance Methods

ns_initialize(initial) click to toggle source

@!visibility private

# File lib/concurrent/atomic/mutex_atomic_fixnum.rb, line 66
def ns_initialize(initial)
  ns_set(initial)
end

Private Instance Methods

ns_set(value) click to toggle source

@!visibility private

# File lib/concurrent/atomic/mutex_atomic_fixnum.rb, line 73
def ns_set(value)
  range_check!(value)
  @value = value
end
range_check!(value) click to toggle source

@!visibility private

# File lib/concurrent/atomic/mutex_atomic_fixnum.rb, line 79
def range_check!(value)
  if !value.is_a?(Fixnum)
    raise ArgumentError.new('value value must be a Fixnum')
  elsif value > MAX_VALUE
    raise RangeError.new("#{value} is greater than the maximum value of #{MAX_VALUE}")
  elsif value < MIN_VALUE
    raise RangeError.new("#{value} is less than the maximum value of #{MIN_VALUE}")
  else
    value
  end
end