Class: Fr::SZipper::EditedCursor

Inherits:
AbstractCursor show all
Defined in:
lib/fr/szipper/edited_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) ⇒ EditedCursor

Returns a new instance of EditedCursor.



7
8
9
10
# File 'lib/fr/szipper/edited_cursor.rb', line 7

def initialize(node, prev)
  @node, @prev =
    node, prev
end

Instance Attribute Details

#nodeObject (readonly)

Returns the value of attribute node.



5
6
7
# File 'lib/fr/szipper/edited_cursor.rb', line 5

def node
  @node
end

Instance Method Details

#append(node) ⇒ Object



28
29
30
# File 'lib/fr/szipper/edited_cursor.rb', line 28

def append(node)
  EditedCursor.new(node.copy(next: @node.next), self)
end

#deleteObject



48
49
50
51
52
53
54
# File 'lib/fr/szipper/edited_cursor.rb', line 48

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)


12
13
14
# File 'lib/fr/szipper/edited_cursor.rb', line 12

def head?
  false
end

#inspectObject



56
57
58
# File 'lib/fr/szipper/edited_cursor.rb', line 56

def inspect
  "Cursor([..., #{@node.inspect}, ...])"
end

#prepend(node) ⇒ Object



32
33
34
# File 'lib/fr/szipper/edited_cursor.rb', line 32

def prepend(node)
  EditedCursor.new(node.copy(next: @node), prev)
end

#prev(phantom = false) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/fr/szipper/edited_cursor.rb', line 20

def prev(phantom = false)
  if @prev.head?
    HeadCursor.new(@prev.node.copy(next: @node))
  else
    EditedCursor.new(@prev.node.copy(next: @node), @prev.prev)
  end
end

#replace(node) ⇒ Object



44
45
46
# File 'lib/fr/szipper/edited_cursor.rb', line 44

def replace(node)
  EditCursor.new(node, @prev)
end

#tail?Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/fr/szipper/edited_cursor.rb', line 16

def tail?
  @node.tail?
end

#update(node = nil) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/fr/szipper/edited_cursor.rb', line 36

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