comparison 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
comparison
equal deleted inserted replaced
76:97b03fc807ad 77:4bf3d0c0b6b9
11 import java.util.Set; 11 import java.util.Set;
12 import java.util.HashSet; 12 import java.util.HashSet;
13 import java.util.IdentityHashMap; 13 import java.util.IdentityHashMap;
14 14
15 15
16 public class LuanTable { 16 public class LuanTable implements DeepCloneable<LuanTable> {
17 private Map<Object,Object> map = null; 17 private Map<Object,Object> map = null;
18 private List<Object> list = null; 18 private List<Object> list = null;
19 private LuanTable metatable = null; 19 private LuanTable metatable = null;
20 20
21 public LuanTable() {} 21 public LuanTable() {}
31 public LuanTable(Set<Object> set) { 31 public LuanTable(Set<Object> set) {
32 map = new HashMap<Object,Object>(); 32 map = new HashMap<Object,Object>();
33 for( Object obj : set ) { 33 for( Object obj : set ) {
34 map.put(obj,Boolean.TRUE); 34 map.put(obj,Boolean.TRUE);
35 } 35 }
36 }
37
38 @Override public LuanTable shallowClone() {
39 return new LuanTable();
40 }
41
42 @Override public void deepenClone(LuanTable clone,DeepCloner cloner) {
43 if( map != null ) {
44 clone.map = new HashMap<Object,Object>();
45 for( Map.Entry<Object,Object> entry : map.entrySet() ) {
46 clone.map.put( cloner.get(entry.getKey()), cloner.get(entry.getValue()) );
47 }
48 }
49 if( list != null ) {
50 clone.list = new ArrayList<Object>();
51 for( Object obj : list ) {
52 clone.list.add( cloner.get(obj) );
53 }
54 }
55 if( metatable != null )
56 clone.metatable = cloner.deepClone(metatable);
36 } 57 }
37 58
38 public boolean isList() { 59 public boolean isList() {
39 return map==null || map.isEmpty(); 60 return map==null || map.isEmpty();
40 } 61 }