Sha256: afaa72eeb79f5b1b9ba27d7737115e2a3cb80d458ce4a0a9e17eb73f0e45adc0

Contents?: true

Size: 1.25 KB

Versions: 12

Compression:

Stored size: 1.25 KB

Contents

require 'concurrent/constants'

module Concurrent

  # @!macro thread_local_var
  # @!macro internal_implementation_note
  # @!visibility private
  class AbstractThreadLocalVar

    # @!macro thread_local_var_method_initialize
    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
      else
        @default = default
      end

      allocate_storage
    end

    # @!macro thread_local_var_method_get
    def value
      raise NotImplementedError
    end

    # @!macro thread_local_var_method_set
    def value=(value)
      raise NotImplementedError
    end

    # @!macro thread_local_var_method_bind
    def bind(value, &block)
      if block_given?
        old_value = self.value
        begin
          self.value = value
          yield
        ensure
          self.value = old_value
        end
      end
    end

    protected

    # @!visibility private
    def allocate_storage
      raise NotImplementedError
    end

    # @!visibility private
    def default
      if @default_block
        self.value = @default_block.call
      else
        @default
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 3 rubygems

Version Path
autocompl-0.2.2 test/dummy/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.0.4/lib/concurrent/atomic/abstract_thread_local_var.rb
autocompl-0.2.1 test/dummy/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.0.4/lib/concurrent/atomic/abstract_thread_local_var.rb
autocompl-0.2.0 test/dummy/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.0.4/lib/concurrent/atomic/abstract_thread_local_var.rb
autocompl-0.1.2 test/dummy/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.0.4/lib/concurrent/atomic/abstract_thread_local_var.rb
autocompl-0.1.1 test/dummy/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.0.4/lib/concurrent/atomic/abstract_thread_local_var.rb
autocompl-0.1.0 test/dummy/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.0.4/lib/concurrent/atomic/abstract_thread_local_var.rb
autocompl-0.0.1 test/dummy/vendor/bundle/ruby/2.3.0/gems/concurrent-ruby-1.0.4/lib/concurrent/atomic/abstract_thread_local_var.rb
abaci-0.3.0 vendor/bundle/gems/concurrent-ruby-1.0.4/lib/concurrent/atomic/abstract_thread_local_var.rb
concurrent-ruby-1.0.4-java lib/concurrent/atomic/abstract_thread_local_var.rb
concurrent-ruby-1.0.4 lib/concurrent/atomic/abstract_thread_local_var.rb
concurrent-ruby-1.0.3-java lib/concurrent/atomic/abstract_thread_local_var.rb
concurrent-ruby-1.0.3 lib/concurrent/atomic/abstract_thread_local_var.rb