class RailwayOperation::Generic::FilledMatrix

Public Class Methods

new(*rows, row_type: Array) click to toggle source
# File lib/railway_operation/generic/filled_matrix.rb, line 8
def initialize(*rows, row_type: Array)
  @row_type = row_type
  @matrix = EnsuredAccess.new(@row_type.new(rows)) do
    EnsuredAccess.new(@row_type.new)
  end

  ensure_rows_length_are_equal!
end

Public Instance Methods

[](row_index, column_index = nil) click to toggle source
# File lib/railway_operation/generic/filled_matrix.rb, line 17
def [](row_index, column_index = nil)
  if column_index
    @matrix.__getobj__[row_index] &&
      @matrix.__getobj__[row_index][column_index]
  else
    @matrix.__getobj__[row_index] || EnsuredAccess.new(@row_type.new)
  end
end
[]=(row_index, column_index, entry) click to toggle source
# File lib/railway_operation/generic/filled_matrix.rb, line 26
def []=(row_index, column_index, entry)
  @max_column_index = nil # bust the max_column_index cache

  @matrix[row_index][column_index] = entry
  ensure_rows_length_are_equal!

  @matrix
end
each() { |row| ... } click to toggle source
# File lib/railway_operation/generic/filled_matrix.rb, line 35
def each
  @matrix.each do |row|
    yield row
  end
end
max_column_index() click to toggle source
# File lib/railway_operation/generic/filled_matrix.rb, line 41
def max_column_index
  @max_column_index ||= (@matrix.compact.max_by(&:length) || []).length - 1
end

Private Instance Methods

ensure_rows_length_are_equal!() click to toggle source
# File lib/railway_operation/generic/filled_matrix.rb, line 47
def ensure_rows_length_are_equal!
  @matrix.each_with_index do |_column, index|
    @matrix[index][max_column_index] ||= nil
  end
end