class Concurrent::LockFreeStack

@!macro warn.edge

Constants

EMPTY

The singleton for empty node

Public Class Methods

new(head = EMPTY) click to toggle source

@param [Node] head

Calls superclass method
# File lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb, line 51
def initialize(head = EMPTY)
  super()
  self.head = head
end
of1(value) click to toggle source

@!visibility private

# File lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb, line 41
def self.of1(value)
  new Node[value, EMPTY]
end
of2(value1, value2) click to toggle source

@!visibility private

# File lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb, line 46
def self.of2(value1, value2)
  new Node[value1, Node[value2, EMPTY]]
end

Public Instance Methods

clear() click to toggle source

@return [true, false]

# 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(&block) click to toggle source

@return [self] @yield over the cleared stack @yieldparam [Object] value

# 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) click to toggle source

@param [Node] head @return [true, false]

# 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) click to toggle source

@param [Node] head @return [true, false]

# 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) click to toggle source

@param [Node] head @return [true, false]

# 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) click to toggle source

@param [Node] head @param [Object] value @return [true, false]

# 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) { |value| ... } click to toggle source

@param [Node] head @return [self]

# 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()) click to toggle source

@param [Node] head @return [true, false]

# File lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb, line 58
def empty?(head = head())
  head.equal? EMPTY
end
inspect()
Alias for: to_s
peek() click to toggle source

@return [Node]

# File lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb, line 79
def peek
  head
end
pop() click to toggle source

@return [Object]

# 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) click to toggle source

@param [Object] value @return [self]

# 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) click to toggle source

@param [Node] head @param [Node] new_head @return [true, false]

# 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() click to toggle source

@return [String] Short string representation.

Calls superclass method
# 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
Also aliased as: inspect