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;
