comparison core/src/luan/LuanPropertyTable.java @ 226:392105b660d7

add LuanProperty git-svn-id: https://luan-java.googlecode.com/svn/trunk@227 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Tue, 22 Jul 2014 06:23:13 +0000
parents
children 1bce334a816b
comparison
equal deleted inserted replaced
225:7c768f63bbb3 226:392105b660d7
1 package luan;
2
3 import java.util.Set;
4 import java.util.Map;
5 import java.util.AbstractMap;
6 import java.util.Iterator;
7
8
9 class LuanPropertyTable extends LuanTableImpl {
10
11 @Override public LuanTableImpl shallowClone() {
12 return new LuanPropertyTable();
13 }
14
15 private Object fixValue(Object obj) {
16 return obj instanceof LuanProperty ? ((LuanProperty)obj).get() : obj;
17 }
18
19 @Override String repr(Set<LuanTableImpl> set,Object obj) {
20 return super.repr(set,fixValue(obj));
21 }
22
23 @Override public Object get(Object key) {
24 return fixValue(super.get(key));
25 }
26
27 @Override public void put(Object key,Object val) {
28 Object v = super.get(key);
29 if( v instanceof LuanProperty ) {
30 LuanProperty lp = (LuanProperty)v;
31 if( lp.set(val) )
32 return;
33 }
34 super.put(key,val);
35 }
36
37 @Override public Iterator<Map.Entry<Object,Object>> iterator() {
38 final Iterator<Map.Entry<Object,Object>> i = super.iterator();
39 return new Iterator<Map.Entry<Object,Object>>() {
40 public boolean hasNext() {
41 return i.hasNext();
42 }
43 public Map.Entry<Object,Object> next() {
44 Map.Entry<Object,Object> entry = i.next();
45 Object v = entry.getValue();
46 if( v instanceof LuanProperty ) {
47 LuanProperty lp = (LuanProperty)v;
48 return new AbstractMap.SimpleEntry<Object,Object>(entry.getKey(),lp.get());
49 }
50 return entry;
51 }
52 public void remove() {
53 i.remove();
54 }
55 };
56 }
57
58 }