diff core/src/luan/LuanTableImpl.java @ 222:b76fcb72d97d

add AbstractLuanTable and improve HttpLuan git-svn-id: https://luan-java.googlecode.com/svn/trunk@223 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Mon, 21 Jul 2014 02:23:05 +0000
parents ec016471c6eb
children 05eb2837ddbf
line wrap: on
line diff
--- a/core/src/luan/LuanTableImpl.java	Thu Jul 17 07:49:26 2014 +0000
+++ b/core/src/luan/LuanTableImpl.java	Mon Jul 21 02:23:05 2014 +0000
@@ -3,6 +3,7 @@
 import java.util.Iterator;
 import java.util.ListIterator;
 import java.util.Map;
+import java.util.AbstractMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.ArrayList;
@@ -14,7 +15,7 @@
 import java.util.regex.Pattern;
 
 
-public final class LuanTableImpl implements LuanTable, DeepCloneable<LuanTableImpl>, LuanRepr {
+final class LuanTableImpl extends AbstractLuanTable implements LuanTable, DeepCloneable<LuanTableImpl>, LuanRepr {
 	private Map<Object,Object> map = null;
 	private List<Object> list = null;
 	private LuanTable metatable = null;
@@ -123,8 +124,8 @@
 		return rtn;
 	}
 
-	@Override public String toString() {
-		return "table: " + Integer.toHexString(hashCode());
+	@Override protected String type() {
+		return "table";
 	}
 
 	@Override public String repr() {
@@ -277,14 +278,14 @@
 
 	@Override public void insert(int pos,Object value) {
 		if( value==null )
-			throw new UnsupportedOperationException();
+			throw new IllegalArgumentException("can't insert a nil value");
 		list().add(pos-1,value);
 		mapToList();
 	}
 
 	@Override public void add(Object value) {
 		if( value==null )
-			throw new UnsupportedOperationException();
+			throw new IllegalArgumentException("can't add a nil value");
 		list().add(value);
 		mapToList();
 	}
@@ -340,7 +341,7 @@
 			}
 			public Map.Entry<Object,Object> next() {
 				Double key = Double.valueOf(iter.nextIndex()+1);
-				return new MapEntry(key,iter.next());
+				return new AbstractMap.SimpleEntry<Object,Object>(key,iter.next());
 			}
 			public void remove() {
 				throw new UnsupportedOperationException();
@@ -362,28 +363,6 @@
 		this.metatable = metatable;
 	}
 
-	private static final class MapEntry implements Map.Entry<Object,Object> {
-		private final Object key;
-		private final Object value;
-
-		MapEntry(Object key,Object value) {
-			this.key = key;
-			this.value = value;
-		}
-
-		@Override public Object getKey() {
-			return key;
-		}
-
-		@Override public Object getValue() {
-			return value;
-		}
-
-		@Override public Object setValue(Object value) {
-			throw new UnsupportedOperationException();
-		}
-	}
-
 	public boolean isEmpty() {
 		return (list==null || list.isEmpty()) && (map==null || map.isEmpty());
 	}