Mercurial Hosting > luan
changeset 431:3ffe8ba5b297
TableLuan cleanup
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 02 May 2015 21:12:48 -0600 |
parents | f28320fd671d |
children | d9df6d6cb927 |
files | core/src/luan/LuanJavaFunction.java core/src/luan/LuanTable.java core/src/luan/modules/IoLuan.java core/src/luan/modules/TableLuan.java |
diffstat | 4 files changed, 26 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/core/src/luan/LuanJavaFunction.java Sat May 02 20:35:26 2015 -0600 +++ b/core/src/luan/LuanJavaFunction.java Sat May 02 21:12:48 2015 -0600 @@ -402,12 +402,24 @@ if( obj instanceof Map ) { @SuppressWarnings("unchecked") Map<Object,Object> map = (Map<Object,Object>)obj; - return new LuanTable(map); + LuanTable tbl = new LuanTable(); + for( Map.Entry<Object,Object> entry : map.entrySet() ) { + Object key = entry.getKey(); + Object value = entry.getValue(); + if( key != null && value != null ) + tbl.rawPut(key,value); + } + return tbl; } if( obj instanceof Set ) { @SuppressWarnings("unchecked") Set<Object> set = (Set<Object>)obj; - return new LuanTable(set); + LuanTable tbl = new LuanTable(); + for( Object el : set ) { + if( el != null ) + tbl.rawPut(el,Boolean.TRUE); + } + return tbl; } Class cls = obj.getClass(); if( cls.isArray() && !cls.getComponentType().isPrimitive() ) {
--- a/core/src/luan/LuanTable.java Sat May 02 20:35:26 2015 -0600 +++ b/core/src/luan/LuanTable.java Sat May 02 21:12:48 2015 -0600 @@ -35,23 +35,6 @@ } } - LuanTable(Map<Object,Object> map) { - map.remove(null); - for( Iterator<Object> i=map.values().iterator(); i.hasNext(); ) { - if( i.next() == null ) - i.remove(); - } - this.map = map; - } - - LuanTable(Set<Object> set) { - map = newMap(); - for( Object obj : set ) { - if( obj != null ) - map.put(obj,Boolean.TRUE); - } - } - public LuanTable(LuanTable tbl) { if( tbl.map != null && !tbl.map.isEmpty() ) this.map = new LinkedHashMap<Object,Object>(tbl.map); @@ -233,25 +216,25 @@ return list; } - public void insert(int pos,Object value) { + public void rawInsert(int pos,Object value) { if( value==null ) throw new IllegalArgumentException("can't insert a nil value"); list().add(pos-1,value); mapToList(); } - public void add(Object value) { + public void rawAdd(Object value) { if( value==null ) throw new IllegalArgumentException("can't add a nil value"); list().add(value); mapToList(); } - public Object remove(int pos) { + public Object rawRemove(int pos) { return list().remove(pos-1); } - public void sort(Comparator<Object> cmp) { + public void rawSort(Comparator<Object> cmp) { Collections.sort(list(),cmp); } @@ -306,7 +289,7 @@ }; } - public LuanTable subList(int from,int to) { + public LuanTable rawSubList(int from,int to) { LuanTable tbl = shallowClone(); tbl.list = new ArrayList<Object>(list().subList(from-1,to-1)); return tbl; @@ -336,14 +319,10 @@ // from AbstractLuanTable - protected final Map<Object,Object> newMap() { + private Map<Object,Object> newMap() { return new LinkedHashMap<Object,Object>(); } - public boolean isEmpty() { - return isList() && length()==0; - } - public boolean isSet() { for( Map.Entry<Object,Object> entry : this ) { if( !entry.getValue().equals(Boolean.TRUE) )
--- a/core/src/luan/modules/IoLuan.java Sat May 02 20:35:26 2015 -0600 +++ b/core/src/luan/modules/IoLuan.java Sat May 02 21:12:48 2015 -0600 @@ -417,7 +417,7 @@ return null; LuanTable list = new LuanTable(); for( File f : files ) { - list.add(new LuanFile(luan,f).table()); + list.rawAdd(new LuanFile(luan,f).table()); } return list; }
--- a/core/src/luan/modules/TableLuan.java Sat May 02 20:35:26 2015 -0600 +++ b/core/src/luan/modules/TableLuan.java Sat May 02 21:12:48 2015 -0600 @@ -35,11 +35,11 @@ } public static void insert(LuanTable list,int pos,Object value){ - list.insert(pos,value); + list.rawInsert(pos,value); } public static Object remove(LuanTable list,int pos) { - return list.remove(pos); + return list.rawRemove(pos); } private static interface LessThan { @@ -70,7 +70,7 @@ }; } try { - list.sort( new Comparator<Object>() { + list.rawSort( new Comparator<Object>() { public int compare(Object o1,Object o2) { return lt.isLessThan(o1,o2) ? -1 : lt.isLessThan(o2,o1) ? 1 : 0; } @@ -88,7 +88,7 @@ if( v==null ) { hasNull = true; } else if( !hasNull ) { - tbl.add(v); + tbl.rawAdd(v); } else { tbl.rawPut(i+1,v); } @@ -108,7 +108,7 @@ } public static LuanTable sub_list(LuanTable list,int from,int to) { - return list.subList(from,to); + return list.rawSubList(from,to); } public static LuanTable clone(LuanTable tbl) {