class Concurrent::AbstractThreadLocalVar

@!macro thread_local_var @!macro internal_implementation_note @!visibility private

Public Class Methods

new(default = nil, &default_block) click to toggle source

@!macro thread_local_var_method_initialize

# File lib/concurrent-ruby/concurrent/atomic/abstract_thread_local_var.rb, line 11
def initialize(default = nil, &default_block)
  if default && block_given?
    raise ArgumentError, "Cannot use both value and block as default value"
  end

  if block_given?
    @default_block = default_block
    @default = nil
  else
    @default_block = nil
    @default = default
  end

  allocate_storage
end

Public Instance Methods

bind(value) { || ... } click to toggle source

@!macro thread_local_var_method_bind

# File lib/concurrent-ruby/concurrent/atomic/abstract_thread_local_var.rb, line 38
def bind(value, &block)
  if block_given?
    old_value = self.value
    begin
      self.value = value
      yield
    ensure
      self.value = old_value
    end
  end
end
value() click to toggle source

@!macro thread_local_var_method_get

# File lib/concurrent-ruby/concurrent/atomic/abstract_thread_local_var.rb, line 28
def value
  raise NotImplementedError
end
value=(value) click to toggle source

@!macro thread_local_var_method_set

# File lib/concurrent-ruby/concurrent/atomic/abstract_thread_local_var.rb, line 33
def value=(value)
  raise NotImplementedError
end

Protected Instance Methods

allocate_storage() click to toggle source

@!visibility private

# File lib/concurrent-ruby/concurrent/atomic/abstract_thread_local_var.rb, line 53
def allocate_storage
  raise NotImplementedError
end
default() click to toggle source

@!visibility private

# File lib/concurrent-ruby/concurrent/atomic/abstract_thread_local_var.rb, line 58
def default
  if @default_block
    self.value = @default_block.call
  else
    @default
  end
end