Class: TECSCDE::TECSModel::TmPortArray

Inherits:
TECSCDE::TmObject show all
Defined in:
lib/tecscde/tecs_model/tm_port_array.rb

Direct Known Subclasses

TmCPortArray, TmEPortArray

Instance Attribute Summary collapse

Attributes inherited from TECSCDE::TmObject

#owner

Instance Method Summary collapse

Methods inherited from TECSCDE::TmObject

#copy_from, #model, #modified

Instance Attribute Details

#actual_sizeObject (readonly)

@ports:: @port_def::Port @actual_size::Integer @subscript1::subscript value of 1st element. to check consistency of subscript



60
61
62
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 60

def actual_size
  @actual_size
end

#portsObject (readonly)

@ports:: @port_def::Port @actual_size::Integer @subscript1::subscript value of 1st element. to check consistency of subscript



60
61
62
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 60

def ports
  @ports
end

Instance Method Details

#array?Boolean

TmPortArray#array?

Returns:

  • (Boolean)


132
133
134
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 132

def array?
  true
end

#clone_for_undoObject

TmPortArray#clone_for_undo



235
236
237
238
239
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 235

def clone_for_undo
  bu = clone
  bu.copy_from(self)
  bu
end

#complete?Boolean

Returns:

  • (Boolean)


220
221
222
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 220

def complete?
  @ports.all?(&:complete?)
end

#deleteObject

TmPortArray#delete

this method is called from TmCell



158
159
160
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 158

def delete
  @ports.each(&:delete)
end

#delete_highlighted(port) ⇒ Object

TmPortArray#delete_highlighted

this method is called from Control



164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 164

def delete_highlighted(port)
  if @port_def.get_array_size != "[]"
    TECSCDE.message_box("      Array size is fixed (\#{@port_def.get_array_size}).\n      Cannot delete array member.\n    MESSAGE\n    return\n  end\n  index = @ports.index(port)\n  if index != 0\n    modified do\n      TECSCDE.logger.info(\"delete #### subscript=\#{port.get_subscript}\")\n      port.delete\n      if @ports.delete(port).nil?\n        TECSCDE.logger.info(\"delete: not found\")\n      end\n      index = 0\n      @ports.each do |pt|\n        pt.set_subscript(index)\n        index += 1\n      end\n    end\n  else\n    TECSCDE.message_box(<<~MESSAGE, :OK)\n      cannot delete array member with subscript==0\n    MESSAGE\n  end\nend\n", :OK)

#editable?Boolean

TmPortArray#editable?

Returns:

  • (Boolean)


225
226
227
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 225

def editable?
  @owner.editable?
end

#get_member(subscript) ⇒ Object



148
149
150
151
152
153
154
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 148

def get_member(subscript)
  if subscript < 0 || subscript >= @actual_size
    nil
  else
    @ports[subscript]
  end
end

#get_near_port(x, y) ⇒ Object

TmPortArray#get_near_port



119
120
121
122
123
124
125
126
127
128
129
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 119

def get_near_port(x, y)
  @ports.each do |port|
    xp, yp = port.get_position
    # p "get_near_port x=#{x} y=#{y} xp=#{xp} yp=#{yp}"
    if ((xp - x).abs < NEAR_DIST) && ((yp - y).abs < NEAR_DIST)
      # p "near port: found"
      return port
    end
  end
  nil
end

#get_port_for_new_join(subscript) ⇒ Object

TmPortArray#get_port_for_new_join this method is for load



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 64

def get_port_for_new_join(subscript)
  if @subscript1.nil?
    # 1st element of this entry array
    @subscript1 = subscript
  elsif (@subscript1 >= 0 && subscript < 0) || (@subscript1 < 0 && subscript >= 0)
    TECSCDE.logger.error("TM9999 array subscript inconsistent (similar error to S1128)")
    return nil
  end

  modified do
    # p "new_join: for name:#{@port_def.get_name}[ #{subscript} ] owner:#{@owner.get_name}, len=#{@ports.length}"
    if subscript >= 0
      if subscript >= @actual_size
        unless @port_def.get_array_size == "[]"
          TECSCDE.logger.error("#{@owner.get_name}.#{@port_def.get_name}[#{subscript}]: subscript=#{subscript} out of range(0..(#{@actual_size - 1})")
          return nil
        end
        # in case of unsized array, extend array
        # extend array size
        (0..subscript).each do |subsc|
          next if @ports[subsc]
          port = new_port(subsc)
          @ports[subsc] = port
        end
        @actual_size = @ports.length
        # p "new_join: 1 for name:#{@port_def.get_name}[ #{subscript} ] owner:#{@owner.get_name}, len=#{@ports.length}"
        return @ports[subscript]
      else
        port = @ports[subscript]
        # p "new_join: 2 for name:#{@port_def.get_name}[ #{subscript} ] owner:#{@owner.get_name}, len=#{@ports.length}"
        return port unless instance_of?(TECSCDE::TECSModel::TmCPortArray) # CPort cannot have multiple join
        if port.get_join
          TECSCDE.logger.error("#{@owner.get_name}.#{@port_def.get_name}[#{subscript}]: duplicate join")
          return nil
        end
      end
    else # no index
      found_port = @ports.find do |pt|
        pt.get_join.nil?
      end
      return found_port if found_port

      # in case of unsized array, extend array
      if @port_def.get_array_size == "[]"
        port = new_port(@ports.length)
        @ports << port
        @actual_size = @ports.length
        return port
      end
    end
    return nil
  end
end

#insert(port, before_after) ⇒ Object

TmPortArray#insert

this method is called from Control



195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 195

def insert(port, before_after)
  if @port_def.get_array_size != "[]"
    TECSCDE.message_box("      Array size is fixed (\#{@port_def.get_array_size}).\n      Cannot insert array member.\n    MESSAGE\n    return\n  end\n  modified do\n    @owner.adjust_port_position_to_insert(port)\n    subsc = port.get_subscript\n    i = @ports.length - 1\n    while i > subsc\n      @ports[i].set_subscript(@ports[i].get_subscript + 1)\n      @ports[i + 1] = @ports[i]\n      i -= 1\n    end\n    new_port = new_port(subsc + 1)\n    new_port.set_position(port.get_edge_side, port.offset + DIST_PORT)\n    @ports[subsc + 1] = new_port\n\n    TECSCDE.logger.info(\"insert ####\")\n  end\nend\n", :OK)

#moved(x_inc, y_inc) ⇒ Object



142
143
144
145
146
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 142

def moved(x_inc, y_inc)
  @ports.each do |port|
    port.moved(x_inc, y_inc)
  end
end

#moved_edge(x_inc_l, x_inc_r, y_inc_t, y_inc_b) ⇒ Object



136
137
138
139
140
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 136

def moved_edge(x_inc_l, x_inc_r, y_inc_t, y_inc_b)
  @ports.each do |port|
    port.moved_edge(x_inc_l, x_inc_r, y_inc_t, y_inc_b)
  end
end

#setup_clone(ports) ⇒ Object



241
242
243
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 241

def setup_clone(ports)
  @ports = ports.dup
end

#unsubscripted_array?Boolean

TmPortArray#unsubscripted_array?

Returns:

  • (Boolean)


230
231
232
# File 'lib/tecscde/tecs_model/tm_port_array.rb', line 230

def unsubscripted_array?
  @port_def.get_array_size == "[]"
end