I understand what you are trying to do here and support the basic idea, but I don't 
know if this will work in general.  What happens when we want to add a sparse matrix 
to a RealMatrixImpl?  J made the point that we can't always require getDataRef to be 
supported.  Given this, for the RealMatrixImp x RealMatrixImpl case, why not just cast 
the RealMatrix operand to a RealMatrixImpl (since getDataRef is defined there)?  This 
could be done with the current impl.  I don't fully see the value of the additional 
interface. 

        -----Original Message----- 
        From: Mark R. Diggory [mailto:[EMAIL PROTECTED] 
        Sent: Mon 10/11/2004 12:10 PM 
        To: Jakarta Commons Developers List 
        Cc: 
        Subject: Re: [math] RealMatrixImpl changes was: RE: cvs commit: 
jakarta-commons/math/src/test/org/apache/commons/math/linear RealMatrixImplTest.java
        
        

        Phil,
        
        Heres a patch that shows the changes which would solve this copying
        issue in the current RealMatrixImpl.
        
        Index: RealMatrixImpl.java
        ===================================================================
        RCS file:
        
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/linear/RealMatrixImpl.java,v
        retrieving revision 1.32
        diff -u -r1.32 RealMatrixImpl.java
        --- RealMatrixImpl.java 10 Oct 2004 18:00:33 -0000      1.32
        +++ RealMatrixImpl.java 11 Oct 2004 19:09:03 -0000
        @@ -48,7 +48,7 @@
           *
           * @version $Revision: 1.32 $ $Date: 2004/10/10 18:00:33 $
           */
        -public class RealMatrixImpl implements RealMatrix, Serializable {
        +public class RealMatrixImpl implements RealMatrix,
        InternalMatrixSupport, Serializable {
        
              /** Serializable version identifier */
              static final long serialVersionUID = 4237564493130426188L;
        @@ -160,7 +160,7 @@
                  int rowCount = this.getRowDimension();
                  int columnCount = this.getColumnDimension();
                  double[][] outData = new double[rowCount][columnCount];
        -        double[][] mData = m.getData();
        +        double[][] mData = ((InternalMatrixSupport)m).getDataRef();
                  for (int row = 0; row < rowCount; row++) {
                      for (int col = 0; col < columnCount; col++) {
                          outData[row][col] = data[row][col] + mData[row][col];
        @@ -184,7 +184,7 @@
                  int rowCount = this.getRowDimension();
                  int columnCount = this.getColumnDimension();
                  double[][] outData = new double[rowCount][columnCount];
        -        double[][] mData = m.getData();
        +        double[][] mData = ((InternalMatrixSupport)m).getDataRef();
                  for (int row = 0; row < rowCount; row++) {
                      for (int col = 0; col < columnCount; col++) {
                          outData[row][col] = data[row][col] - mData[row][col];
        @@ -242,7 +242,7 @@
                  int nRows = this.getRowDimension();
                  int nCols = m.getColumnDimension();
                  int nSum = this.getColumnDimension();
        -        double[][] mData = m.getData();
        +        double[][] mData = ((InternalMatrixSupport)m).getDataRef();
                  double[][] outData = new double[nRows][nCols];
                  double sum = 0;
                  for (int row = 0; row < nRows; row++) {
        @@ -716,7 +716,7 @@
                  int nRowB = b.getRowDimension();
        
                  // Apply permutations to b
        -        double[][] bv = b.getData();
        +        double[][] bv = ((InternalMatrixSupport)b).getDataRef();
                  double[][] bp = new double[nRowB][nColB];
                  for (int row = 0; row < nRowB; row++) {
                      for (int col = 0; col < nColB; col++) {
        Index: InternalMatrixSupport.java
        ===================================================================
        RCS file: InternalMatrixSupport.java
        diff -N InternalMatrixSupport.java
        --- /dev/null   1 Jan 1970 00:00:00 -0000
        +++ InternalMatrixSupport.java  1 Jan 1970 00:00:00 -0000
        @@ -0,0 +1,26 @@
        +/*
        + * Created on Oct 11, 2004
        + *
        + * TODO To change the template for this generated file go to
        + * Window - Preferences - Java - Code Style - Code Templates
        + */
        +package org.apache.commons.math.linear;
        +
        +/**
        + * @author Administrator
        + *
        + * TODO To change the template for this generated type comment go to
        + * Window - Preferences - Java - Code Style - Code Templates
        + */
        +public interface InternalMatrixSupport {
        +
        +       /**
        +     * Returns a reference to the underlying data array.
        +     * <p>
        +     * Does not make a fresh copy of the underlying data.
        +     *
        +     * @return 2-dimensional array of entries
        +     */
        +    public double[][] getDataRef();
        +
        +}
        
        ---------------------------------------------------------------------
        To unsubscribe, e-mail: [EMAIL PROTECTED]
        For additional commands, e-mail: [EMAIL PROTECTED]
        
        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to