Mercurial Hosting > luan
diff src/luan/LuanTable.java @ 77:4bf3d0c0b6b9
make LuanState cloneable
git-svn-id: https://luan-java.googlecode.com/svn/trunk@78 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Fri, 15 Feb 2013 09:55:17 +0000 |
parents | cd9dbd7477ca |
children | 9df729fa4419 |
line wrap: on
line diff
--- a/src/luan/LuanTable.java Fri Feb 15 04:52:16 2013 +0000 +++ b/src/luan/LuanTable.java Fri Feb 15 09:55:17 2013 +0000 @@ -13,7 +13,7 @@ import java.util.IdentityHashMap; -public class LuanTable { +public class LuanTable implements DeepCloneable<LuanTable> { private Map<Object,Object> map = null; private List<Object> list = null; private LuanTable metatable = null; @@ -35,6 +35,27 @@ } } + @Override public LuanTable shallowClone() { + return new LuanTable(); + } + + @Override public void deepenClone(LuanTable clone,DeepCloner cloner) { + if( map != null ) { + clone.map = new HashMap<Object,Object>(); + for( Map.Entry<Object,Object> entry : map.entrySet() ) { + clone.map.put( cloner.get(entry.getKey()), cloner.get(entry.getValue()) ); + } + } + if( list != null ) { + clone.list = new ArrayList<Object>(); + for( Object obj : list ) { + clone.list.add( cloner.get(obj) ); + } + } + if( metatable != null ) + clone.metatable = cloner.deepClone(metatable); + } + public boolean isList() { return map==null || map.isEmpty(); }