Class: HRX::OrderedNode

Inherits:
LinkedList::Node
  • Object
show all
Defined in:
lib/hrx/ordered_node.rb

Overview

A linked list node that tracks its order reltaive to other nodes.

This assumes that, while nodes may be added or removed from a given list, a given node object will only ever have one position in the list. This invariant is maintained by all methods of LinkedList::List other than LinkedList::List#reverse and LinkedList::List#reverse!.

We use this to efficiently determine where to insert a new file relative to existing files with HRX#write.

Instance Method Summary collapse

Constructor Details

#initialize(data) ⇒ OrderedNode

:nodoc:



27
28
29
30
# File 'lib/hrx/ordered_node.rb', line 27

def initialize(data)
  super
  @order = nil
end

Instance Method Details

#next=(other) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/hrx/ordered_node.rb', line 43

def next=(other)
  @order ||=
    if other.nil?
      nil
    elsif other.prev
      (other.prev.order + other.order) / 2.0
    else
      other.order - 1
    end
  super
end

#orderObject

The relative order of this node.

This is guaranteed to be greater than the order of all nodes before this in the list, and less than the order of all nodes after it. Otherwise it provides no guarantees.

This is not guaranteed to be stale over time.



39
40
41
# File 'lib/hrx/ordered_node.rb', line 39

def order
  @order || 0
end

#prev=(other) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
# File 'lib/hrx/ordered_node.rb', line 55

def prev=(other)
  @order ||=
    if other.nil?
      nil
    elsif other.next&.order
      (other.next.order + other.order) / 2.0
    else
      other.order + 1
    end
  super
end