Mercurial Hosting > luan
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 } |