Class: HRX::OrderedNode
- Inherits:
-
LinkedList::Node
- Object
- LinkedList::Node
- HRX::OrderedNode
- 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
-
#initialize(data) ⇒ OrderedNode
constructor
:nodoc:.
- #next=(other) ⇒ Object
-
#order ⇒ Object
The relative order of this node.
- #prev=(other) ⇒ Object
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 |
#order ⇒ Object
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 |