Class: Fr::SZipper::MemoizedCursor

Inherits:
AbstractCursor show all
Defined in:
lib/fr/szipper/memoized_cursor.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from AbstractCursor

#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

#initialize(node, prev) ⇒ MemoizedCursor

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

#node#next, #tail? (readonly)

Returns:



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

#deleteObject



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

Returns:

  • (Boolean)


17
18
19
# File 'lib/fr/szipper/memoized_cursor.rb', line 17

def head?
  false
end

#inspectObject



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

Returns:

  • (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