Mercurial Hosting > luan
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/src/luan/LuanPropertyTable.java Tue Jul 22 06:23:13 2014 +0000 @@ -0,0 +1,58 @@ +package luan; + +import java.util.Set; +import java.util.Map; +import java.util.AbstractMap; +import java.util.Iterator; + + +class LuanPropertyTable extends LuanTableImpl { + + @Override public LuanTableImpl shallowClone() { + return new LuanPropertyTable(); + } + + private Object fixValue(Object obj) { + return obj instanceof LuanProperty ? ((LuanProperty)obj).get() : obj; + } + + @Override String repr(Set<LuanTableImpl> set,Object obj) { + return super.repr(set,fixValue(obj)); + } + + @Override public Object get(Object key) { + return fixValue(super.get(key)); + } + + @Override public void put(Object key,Object val) { + Object v = super.get(key); + if( v instanceof LuanProperty ) { + LuanProperty lp = (LuanProperty)v; + if( lp.set(val) ) + return; + } + super.put(key,val); + } + + @Override public Iterator<Map.Entry<Object,Object>> iterator() { + final Iterator<Map.Entry<Object,Object>> i = super.iterator(); + return new Iterator<Map.Entry<Object,Object>>() { + public boolean hasNext() { + return i.hasNext(); + } + public Map.Entry<Object,Object> next() { + Map.Entry<Object,Object> entry = i.next(); + Object v = entry.getValue(); + if( v instanceof LuanProperty ) { + LuanProperty lp = (LuanProperty)v; + return new AbstractMap.SimpleEntry<Object,Object>(entry.getKey(),lp.get()); + } + return entry; + } + public void remove() { + i.remove(); + } + }; + } + +}