Repository: incubator-systemml
Updated Branches:
  refs/heads/master 444e2b03a -> 9c4228215


[SYSTEMML-380] Fix CSR primitives (init from CSR / resize on row insert)

Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/205cfd3f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/205cfd3f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/205cfd3f

Branch: refs/heads/master
Commit: 205cfd3f84da991b052c5b8ffa191c9299ec01bf
Parents: 444e2b0
Author: Matthias Boehm <[email protected]>
Authored: Fri Jan 22 16:42:36 2016 -0800
Committer: Matthias Boehm <[email protected]>
Committed: Sat Jan 23 16:07:52 2016 -0800

----------------------------------------------------------------------
 .../sysml/runtime/matrix/data/SparseBlockCSR.java    | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/205cfd3f/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java 
b/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java
index 139cec3..876b0ed 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/SparseBlockCSR.java
@@ -72,7 +72,7 @@ public class SparseBlockCSR extends SparseBlock
                //special case SparseBlockCSR
                if( sblock instanceof SparseBlockCSR ) { 
                        SparseBlockCSR ocsr = (SparseBlockCSR)sblock;
-                       _ptr = Arrays.copyOf(ocsr._ptr, ocsr.numRows());
+                       _ptr = Arrays.copyOf(ocsr._ptr, ocsr.numRows()+1);
                        _indexes = Arrays.copyOf(ocsr._indexes, ocsr._size);
                        _values = Arrays.copyOf(ocsr._values, ocsr._size);
                        _size = ocsr._size;
@@ -260,11 +260,22 @@ public class SparseBlockCSR extends SparseBlock
        @Override
        public void set(int r, SparseRow row) {
                int pos = pos(r);
+               int len = size(r);              
                int alen = row.size();
                int[] aix = row.indexes();
                double[] avals = row.values();
-               deleteIndexRange(r, aix[0], aix[alen-1]+1);
+               
+               //delete existing values if necessary
+               if( len > 0 )
+                       deleteIndexRange(r, aix[0], aix[alen-1]+1);
+               
+               //prepare free space (allocate and shift)
+               int lsize = _size+alen;
+               if( _values.length < lsize )
+                       resize(lsize);                          
                shiftRightByN(pos, alen);
+               
+               //copy input row into internal representation
                System.arraycopy(aix, 0, _indexes, pos, alen);
                System.arraycopy(avals, 0, _values, pos, alen);
                _size+=alen;

Reply via email to