class Concurrent::Edge::LockFreeLinkedSet::Node
Public Class Methods
new(data = nil, successor = nil)
click to toggle source
Calls superclass method
# File lib/concurrent/edge/lock_free_linked_set/node.rb, line 11 def initialize(data = nil, successor = nil) super() @SuccessorReference = AtomicMarkableReference.new(successor || Tail.new) @Data = data @Key = key_for data end
Public Instance Methods
<=>(other)
click to toggle source
We use `Object#hash` as a way to enforce ordering on the nodes. This can be configurable in the future; for example, you could enforce a split-ordering on the nodes in the set.
# File lib/concurrent/edge/lock_free_linked_set/node.rb, line 51 def <=>(other) @Key <=> other.hash end
data()
click to toggle source
# File lib/concurrent/edge/lock_free_linked_set/node.rb, line 18 def data @Data end
key()
click to toggle source
# File lib/concurrent/edge/lock_free_linked_set/node.rb, line 26 def key @Key end
key_for(data)
click to toggle source
This method provides a unqiue key for the data which will be used for ordering. This is configurable, and changes depending on how you wish the nodes to be ordered.
# File lib/concurrent/edge/lock_free_linked_set/node.rb, line 44 def key_for(data) data.hash end
last?()
click to toggle source
Check to see if the node is the last in the list.
# File lib/concurrent/edge/lock_free_linked_set/node.rb, line 31 def last? @SuccessorReference.value.is_a? Tail end
next_node()
click to toggle source
Next node in the list. Note: this is not the AtomicMarkableReference of the next node, this is the actual Node itself.
# File lib/concurrent/edge/lock_free_linked_set/node.rb, line 37 def next_node @SuccessorReference.value end
successor_reference()
click to toggle source
# File lib/concurrent/edge/lock_free_linked_set/node.rb, line 22 def successor_reference @SuccessorReference end