Project

General

Profile

Bug #1532 » d_matrix_cleanup.diff

marcandre (Marc-Andre Lafortune), 09/17/2009 02:03 PM

View differences:

lib/matrix.rb
#
def ==(other)
return false unless Matrix === other
other.compare_by_row_vectors(@rows)
rows == other.rows
end
def eql?(other)
return false unless Matrix === other
other.compare_by_row_vectors(@rows, :eql?)
end
#
# Not really intended for general consumption.
#
def compare_by_row_vectors(rows, comparison = :==)
return false unless @rows.size == rows.size
@rows.size.times do |i|
return false unless @rows[i].send(comparison, rows[i])
end
true
rows.eql? other.rows
end
#
......
#INSTANCE CREATION
private_class_method :new
attr_reader :elements
protected :elements
#
# Creates a Vector from a list of elements.
# Vector[7, 4, ...]
#
def Vector.[](*array)
new(:init_elements, array, copy = false)
new Matrix.convert_to_array(array, copy = false)
end
#
......
# whether the array itself or a copy is used internally.
#
def Vector.elements(array, copy = true)
new(:init_elements, array, copy)
new Matrix.convert_to_array(array, copy)
end
#
# For internal use.
# Vector.new is private; use Vector[] or Vector.elements to create.
#
def initialize(method, array, copy)
self.send(method, array, copy)
end
#
# For internal use.
#
def init_elements(array, copy)
if copy
@elements = array.dup
else
@elements = array
end
def initialize(array)
# No checking is done at this point.
@elements = array
end
# ACCESSING
......
#
def ==(other)
return false unless Vector === other
other.compare_by(@elements)
@elements == other.elements
end
def eql?(other)
return false unless Vector === other
other.compare_by(@elements, :eql?)
end
#
# For internal use.
#
def compare_by(elements, comparison = :==)
@elements.send(comparison, elements)
@elements.eql? other.elements
end
#
(6-6/7)