Class: YNelson::ZzPoint

Inherits:
Object
  • Object
show all
Defined in:
lib/y_nelson/zz_point.rb

Overview

A pointer to a Zz object. A glorified variable, basically.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(zz: nil) ⇒ ZzPoint

Initialization has one optional argument :zz – zz object at which the point should be initialized.



11
12
13
# File 'lib/y_nelson/zz_point.rb', line 11

def initialize( zz: nil )
  @zz = zz
end

Instance Attribute Details

#zzObject

Returns the value of attribute zz.



6
7
8
# File 'lib/y_nelson/zz_point.rb', line 6

def zz
  @zz
end

Instance Method Details

#along(dimension = default_dimension) ⇒ Object

Quasi-delegation to zz



29
30
31
# File 'lib/y_nelson/zz_point.rb', line 29

def along dimension=default_dimension
  zz.along dimension
end

#bud_negward(value = nil, along: default_dimension) ⇒ Object



68
69
70
# File 'lib/y_nelson/zz_point.rb', line 68

def bud_negward( value=nil, along: default_dimension )
  negward( along: along ).bud value
end

#bud_posward(value = nil, along: default_dimension) ⇒ Object Also known as: bud



63
64
65
# File 'lib/y_nelson/zz_point.rb', line 63

def bud_posward( value=nil, along: default_dimension )
  posward( along: along ).bud value
end

#default_dimensionObject



25
# File 'lib/y_nelson/zz_point.rb', line 25

def default_dimension; YNelson.primary_dimension end

#negward(along: default_dimension) ⇒ Object Also known as: n



38
39
40
# File 'lib/y_nelson/zz_point.rb', line 38

def negward( along: default_dimension )
  along( along ).negward_side
end

#negward_neighbor(along: default_dimension) ⇒ Object Also known as: N



48
49
50
# File 'lib/y_nelson/zz_point.rb', line 48

def negward_neighbor( along: default_dimension )
  negward( along: along ).neighbor
end

#posward(along: default_dimension) ⇒ Object Also known as: p



33
34
35
# File 'lib/y_nelson/zz_point.rb', line 33

def posward( along: default_dimension )
  along( along ).posward
end

#posward_neighbor(along: default_dimension) ⇒ Object Also known as: P



43
44
45
# File 'lib/y_nelson/zz_point.rb', line 43

def posward_neighbor( along: default_dimension )
  posward( along: along ).neighbor
end

#rank(along: default_dimension) ⇒ Object



72
73
74
# File 'lib/y_nelson/zz_point.rb', line 72

def rank( along: default_dimension )
  zz.get_rank along: along
end

#redefine_negward_neighbor(neighbor, along: default_dimension) ⇒ Object Also known as: N!



58
59
60
# File 'lib/y_nelson/zz_point.rb', line 58

def redefine_negward_neighbor( neighbor, along: default_dimension )
  negward( along: along ) << neighbor
end

#redefine_posward_neighbor(neighbor, along: default_dimension) ⇒ Object Also known as: P!



53
54
55
# File 'lib/y_nelson/zz_point.rb', line 53

def redefine_posward_neighbor( neighbor, along: default_dimension )
  posward( along: along ) << neighbor
end

#rewind_negward(along: default_dimension) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/y_nelson/zz_point.rb', line 110

def rewind_negward( along: default_dimension )
  origin = zz
  if block_given? then
    loop { yield zz
           return :end unless negward_neighbor( along: along ).is_a_zz?
           return :loop if negward_neighbor( along: along ) == origin
           step_negward along: along }
  else
    Enumerator.new { |y|
      loop { y << zz
             break :end unless negward_neighbor( along: along ).is_a_zz?
             break :loop if negward_neighbor( along: along ) == origin
             step_negward along: along }
    }
  end
end

#rewind_negward!(along: default_dimension) ⇒ Object



133
134
135
# File 'lib/y_nelson/zz_point.rb', line 133

def rewind_negward!( along: default_dimension )
  rewind_negward( along: along ) {}
end

#rewind_posward(along: default_dimension) ⇒ Object

Rewinders



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/y_nelson/zz_point.rb', line 93

def rewind_posward( along: default_dimension )
  origin = zz
  if block_given? then
    loop { yield zz
           return :end unless posward_neighbor( along: along ).is_a_zz?
           return :loop if posward_neighbor( along: along ) == origin
           step_posward along: along }
  else # no block given, returns enumerator
    Enumerator.new { |y|
      loop { y << zz
             break :end unless posward_neighbor( along: along ).is_a_zz?
             break :loop if posward_neighbor( along: along ) == origin
             step_posward along: along }
    }
  end
end

#rewind_posward!(along: default_dimension) ⇒ Object

Simple unconditional rewind.



129
130
131
# File 'lib/y_nelson/zz_point.rb', line 129

def rewind_posward!( along: default_dimension )
  rewind_posward( along: along ) {} # implemented using empty block
end

#step_negward(along: default_dimension) ⇒ Object Also known as: n!



85
86
87
88
# File 'lib/y_nelson/zz_point.rb', line 85

def step_negward( along: default_dimension )
  neighbor = negward_neighbor along: along
  if neighbor.is_a_zz? then @zz = neighbor else false end
end

#step_posward(along: default_dimension) ⇒ Object Also known as: step, p!

Walkers



78
79
80
81
# File 'lib/y_nelson/zz_point.rb', line 78

def step_posward( along: default_dimension )
  neighbor = posward_neighbor along: along
  if neighbor.is_a_zz? then @zz = neighbor else false end
end