Class: Fr::SZipper::MemoizedCursor
Instance Attribute Summary collapse
Instance Method Summary
collapse
#empty?, #head, #next, #position, #tail, #truncate
Methods included from Enumerable
#all?, #any?, #chunk, #collect, #collect_concat, #count, #cycle, #detect, #drop, #drop_while, #each, #entries, #filter, #filter_, #first, #flat_map, #foldl, #grep, #group_by, #include?, #index, #max, #max_by, #min, #min_by, #minmax, #minmax_by, #none?, #partition, #reduce, #reject, #sort, #take, #take_while, #zip
Constructor Details
Returns a new instance of MemoizedCursor.
8
9
10
11
|
# File 'lib/fr/szipper/memoized_cursor.rb', line 8
def initialize(node, prev)
@node, @prev =
node, prev
end
|
Instance Attribute Details
6
7
8
|
# File 'lib/fr/szipper/memoized_cursor.rb', line 6
def node
@node
end
|
Instance Method Details
#append(node) ⇒ Object
25
26
27
|
# File 'lib/fr/szipper/memoized_cursor.rb', line 25
def append(node)
EditedCursor.new(node.copy(next: @node.next), self)
end
|
45
46
47
48
49
50
51
|
# File 'lib/fr/szipper/memoized_cursor.rb', line 45
def delete
if @prev.head?
HeadCursor.new(@prev.node.copy(next: @node.next))
else
EditedCursor.new(@prev.node.copy(next: @node.next), @prev.prev)
end
end
|
#head? ⇒ Boolean
17
18
19
|
# File 'lib/fr/szipper/memoized_cursor.rb', line 17
def head?
false
end
|
53
54
55
|
# File 'lib/fr/szipper/memoized_cursor.rb', line 53
def inspect
"Cursor([..., #{@node.inspect}, ...])"
end
|
#prepend(node) ⇒ Object
29
30
31
|
# File 'lib/fr/szipper/memoized_cursor.rb', line 29
def prepend(node)
EditedCursor.new(node.copy(next: @node), @prev)
end
|
#prev(phantom = false) ⇒ Object
13
14
15
|
# File 'lib/fr/szipper/memoized_cursor.rb', line 13
def prev(phantom = false)
@prev
end
|
#replace(node) ⇒ Object
41
42
43
|
# File 'lib/fr/szipper/memoized_cursor.rb', line 41
def replace(node)
EditedCursor.new(node, @prev)
end
|
#tail? ⇒ Boolean
21
22
23
|
# File 'lib/fr/szipper/memoized_cursor.rb', line 21
def tail?
@node.tail?
end
|
#update(node = nil) ⇒ Object
33
34
35
36
37
38
39
|
# File 'lib/fr/szipper/memoized_cursor.rb', line 33
def update(node = nil)
if node.nil?
EditedCursor.new(yield(@node).copy(next: @node.next), @prev)
else
EditedCursor.new(node.copy(next: @node.next), @prev)
end
end
|