Class: Concurrent::LockFreeStack
- Inherits:
 - 
      Synchronization::Object
      
        
- Object
 - Synchronization::AbstractObject
 - Synchronization::Object
 - Concurrent::LockFreeStack
 
 
- Includes:
 - Enumerable
 
- Defined in:
 - lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb
 
Overview
    Note:
    
  
  **Edge Features** are under active development and may change frequently.
- 
Deprecations are not added before incompatible changes.
 - 
Edge version: major is always 0, minor bump means incompatible change, patch bump means compatible change.
 - 
Edge features may also lack tests and documentation.
 - 
Features developed in ‘concurrent-ruby-edge` are expected to move to `concurrent-ruby` when finalised.
 
Defined Under Namespace
Classes: Node
Constant Summary collapse
- EMPTY =
          
The singleton for empty node
 Node[nil, nil]
Instance Method Summary collapse
- #clear ⇒ true, false
 - #clear_each {|value| ... } ⇒ self
 - #clear_if(head) ⇒ true, false
 - #compare_and_clear(head) ⇒ true, false
 - #compare_and_pop(head) ⇒ true, false
 - #compare_and_push(head, value) ⇒ true, false
 - #each(head = nil) ⇒ self
 - #empty?(head = head()) ⇒ true, false
 - 
  
    
      #initialize(head = EMPTY)  ⇒ LockFreeStack 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
A new instance of LockFreeStack.
 - #peek ⇒ Node
 - #pop ⇒ Object
 - #push(value) ⇒ self
 - #replace_if(head, new_head) ⇒ true, false
 - 
  
    
      #to_s  ⇒ String 
    
    
      (also: #inspect)
    
  
  
  
  
  
  
  
  
  
    
Short string representation.
 
Constructor Details
#initialize(head = EMPTY) ⇒ LockFreeStack
Returns a new instance of LockFreeStack.
      51 52 53 54  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 51 def initialize(head = EMPTY) super() self.head = head end  | 
  
Instance Method Details
#clear ⇒ true, false
      118 119 120 121 122 123 124  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 118 def clear while true current_head = head return false if current_head == EMPTY return true if compare_and_set_head current_head, EMPTY end end  | 
  
#clear_each {|value| ... } ⇒ self
      142 143 144 145 146 147 148 149 150 151  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 142 def clear_each(&block) while true current_head = head return self if current_head == EMPTY if compare_and_set_head current_head, EMPTY each current_head, &block return self end end end  | 
  
#clear_if(head) ⇒ true, false
      128 129 130  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 128 def clear_if(head) compare_and_set_head head, EMPTY end  | 
  
#compare_and_clear(head) ⇒ true, false
      99 100 101  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 99 def compare_and_clear(head) compare_and_set_head head, EMPTY end  | 
  
#compare_and_pop(head) ⇒ true, false
      85 86 87  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 85 def compare_and_pop(head) compare_and_set_head head, head.next_node end  | 
  
#compare_and_push(head, value) ⇒ true, false
      65 66 67  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 65 def compare_and_push(head, value) compare_and_set_head head, Node[value, head] end  | 
  
#each(head = nil) ⇒ self
      107 108 109 110 111 112 113 114 115  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 107 def each(head = nil) return to_enum(:each, head) unless block_given? it = head || peek until it.equal?(EMPTY) yield it.value it = it.next_node end self end  | 
  
#empty?(head = head()) ⇒ true, false
      58 59 60  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 58 def empty?(head = head()) head.equal? EMPTY end  | 
  
#peek ⇒ Node
      79 80 81  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 79 def peek head end  | 
  
#pop ⇒ Object
      90 91 92 93 94 95  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 90 def pop while true current_head = head return current_head.value if compare_and_set_head current_head, current_head.next_node end end  | 
  
#push(value) ⇒ self
      71 72 73 74 75 76  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 71 def push(value) while true current_head = head return self if compare_and_set_head current_head, Node[value, current_head] end end  | 
  
#replace_if(head, new_head) ⇒ true, false
      135 136 137  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 135 def replace_if(head, new_head) compare_and_set_head head, new_head end  | 
  
#to_s ⇒ String Also known as: inspect
Returns Short string representation.
      154 155 156  | 
    
      # File 'lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb', line 154 def to_s format '%s %s>', super[0..-2], to_a.to_s end  |