Repository: systemml
Updated Branches:
  refs/heads/master b85aea348 -> 96954b4ca


[MINOR] Fix incorrect list indexing range check, extended name handling

Closes #766.


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

Branch: refs/heads/master
Commit: 96954b4ca980d928bf2c4c4eb012efe0188a4ac6
Parents: b85aea3
Author: EdgarLGB <[email protected]>
Authored: Tue May 22 22:23:59 2018 -0700
Committer: Matthias Boehm <[email protected]>
Committed: Tue May 22 22:35:07 2018 -0700

----------------------------------------------------------------------
 .../runtime/instructions/cp/ListObject.java     | 57 +++++++++++---------
 1 file changed, 31 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/96954b4c/src/main/java/org/apache/sysml/runtime/instructions/cp/ListObject.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/runtime/instructions/cp/ListObject.java 
b/src/main/java/org/apache/sysml/runtime/instructions/cp/ListObject.java
index 0fdb1e8..95f03b5 100644
--- a/src/main/java/org/apache/sysml/runtime/instructions/cp/ListObject.java
+++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/ListObject.java
@@ -26,8 +26,7 @@ import org.apache.sysml.parser.Expression.DataType;
 import org.apache.sysml.parser.Expression.ValueType;
 import org.apache.sysml.runtime.DMLRuntimeException;
 
-public class ListObject extends Data
-{
+public class ListObject extends Data {
        private static final long serialVersionUID = 3652422061598967358L;
 
        private final List<String> _names;
@@ -63,57 +62,63 @@ public class ListObject extends Data
        }
        
        public ListObject slice(int ix1, int ix2) {
-               ListObject ret = new ListObject(_data.subList(ix1, ix2+1),
-                       (_names!=null) ? _names.subList(ix1, ix2+1) : null);
-               ret.setStatus(Arrays.copyOfRange(_dataState, ix2, ix2+1));
+               ListObject ret = new ListObject(_data.subList(ix1, ix2 + 1),
+                       (_names != null) ? _names.subList(ix1, ix2 + 1) : null);
+               ret.setStatus(Arrays.copyOfRange(_dataState, ix2, ix2 + 1));
                return ret;
        }
        
        public Data slice(String name) {
                //check for existing named list
-               if( _names == null )
-                       throw new DMLRuntimeException("Invalid lookup by name"
-                               + " in unnamed list: "+name+".");
-               
+               if (_names == null)
+                       throw new DMLRuntimeException("Invalid lookup by name" 
+ " in unnamed list: " + name + ".");
+
                //find position and check for existing entry
                int pos = _names.indexOf(name);
-               if( pos <= 0 || pos >= _data.size() )
-                       throw new DMLRuntimeException("List lookup returned no 
entry for name='"+name+"'");
-               
+               if (pos < 0 || pos >= _data.size())
+                       throw new DMLRuntimeException("List lookup returned no 
entry for name='" + name + "'");
+
                //return existing entry
                return slice(pos);
        }
        
        public ListObject slice(String name1, String name2) {
                //check for existing named list
-               if( _names == null )
-                       throw new DMLRuntimeException("Invalid lookup by name"
-                               + " in unnamed list: "+name1+", "+name2+".");
-               
+               if (_names == null)
+                       throw new DMLRuntimeException("Invalid lookup by name" 
+ " in unnamed list: " + name1 + ", " + name2 + ".");
+
                //find position and check for existing entry
                int pos1 = _names.indexOf(name1);
                int pos2 = _names.indexOf(name2);
-               if( pos1 <= 0 || pos1 >= _data.size() )
-                       throw new DMLRuntimeException("List lookup returned no 
entry for name='"+name1+"'");
-               if( pos2 <= 0 || pos2 >= _data.size() )
-                       throw new DMLRuntimeException("List lookup returned no 
entry for name='"+name2+"'");
-               
+               if (pos1 < 0 || pos1 >= _data.size())
+                       throw new DMLRuntimeException("List lookup returned no 
entry for name='" + name1 + "'");
+               if (pos2 < 0 || pos2 >= _data.size())
+                       throw new DMLRuntimeException("List lookup returned no 
entry for name='" + name2 + "'");
+
                //return list object
                return slice(pos1, pos2);
        }
-       
+
+       public List<String> getNames() {
+               return _names;
+       }
+
+       public String getName(int ix) {
+               return (_names == null) ? null : _names.get(ix);
+       }
+
        @Override
        public String getDebugName() {
                return toString();
        }
        
        @Override
-       public String toString() { 
+       public String toString() {
                StringBuilder sb = new StringBuilder("List (");
-               for( int i=0; i<_data.size(); i++ ) {
-                       if( i > 0 )
+               for (int i = 0; i < _data.size(); i++) {
+                       if (i > 0)
                                sb.append(", ");
-                       if( _names != null ) {
+                       if (_names != null) {
                                sb.append(_names.get(i));
                                sb.append("=");
                        }

Reply via email to