Class: Concurrent::Tuple
- Inherits:
 - 
      Object
      
        
- Object
 - Concurrent::Tuple
 
 
- Includes:
 - Enumerable
 
- Defined in:
 - lib/concurrent-ruby/concurrent/tuple.rb
 
Overview
A fixed size array with volatile (synchronized, thread safe) getters/setters. Mixes in Ruby’s ‘Enumerable` module for enhanced search, sort, and traversal.
Instance Attribute Summary collapse
- 
  
    
      #size  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
The (fixed) size of the tuple.
 
Instance Method Summary collapse
- 
  
    
      #compare_and_set(i, old_value, new_value)  ⇒ Boolean 
    
    
      (also: #cas)
    
  
  
  
  
  
  
  
  
  
    
Set the value at the given index to the new value if and only if the current value matches the given old value.
 - 
  
    
      #each {|ref| ... } ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Calls the given block once for each element in self, passing that element as a parameter.
 - 
  
    
      #get(i)  ⇒ Object 
    
    
      (also: #volatile_get)
    
  
  
  
  
  
  
  
  
  
    
Get the value of the element at the given index.
 - 
  
    
      #initialize(size)  ⇒ Tuple 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
Create a new tuple of the given size.
 - 
  
    
      #set(i, value)  ⇒ Object 
    
    
      (also: #volatile_set)
    
  
  
  
  
  
  
  
  
  
    
Set the element at the given index to the given value.
 
Constructor Details
#initialize(size) ⇒ Tuple
Create a new tuple of the given size.
      29 30 31 32 33 34 35 36 37  | 
    
      # File 'lib/concurrent-ruby/concurrent/tuple.rb', line 29 def initialize(size) @size = size @tuple = tuple = ::Array.new(size) i = 0 while i < size tuple[i] = Concurrent::AtomicReference.new i += 1 end end  | 
  
Instance Attribute Details
#size ⇒ Object (readonly)
The (fixed) size of the tuple.
      24 25 26  | 
    
      # File 'lib/concurrent-ruby/concurrent/tuple.rb', line 24 def size @size end  | 
  
Instance Method Details
#compare_and_set(i, old_value, new_value) ⇒ Boolean Also known as: cas
Set the value at the given index to the new value if and only if the current value matches the given old value.
      69 70 71 72  | 
    
      # File 'lib/concurrent-ruby/concurrent/tuple.rb', line 69 def compare_and_set(i, old_value, new_value) return false if i >= @size || i < 0 @tuple[i].compare_and_set(old_value, new_value) end  | 
  
#each {|ref| ... } ⇒ Object
Calls the given block once for each element in self, passing that element as a parameter.
      78 79 80  | 
    
      # File 'lib/concurrent-ruby/concurrent/tuple.rb', line 78 def each @tuple.each {|ref| yield ref.get} end  | 
  
#get(i) ⇒ Object Also known as: volatile_get
Get the value of the element at the given index.
      43 44 45 46  | 
    
      # File 'lib/concurrent-ruby/concurrent/tuple.rb', line 43 def get(i) return nil if i >= @size || i < 0 @tuple[i].get end  | 
  
#set(i, value) ⇒ Object Also known as: volatile_set
Set the element at the given index to the given value
      55 56 57 58  | 
    
      # File 'lib/concurrent-ruby/concurrent/tuple.rb', line 55 def set(i, value) return nil if i >= @size || i < 0 @tuple[i].set(value) end  |