Mercurial Hosting > luan
diff src/luan/modules/ThreadLuan.java @ 1099:a5406f076726
improve Thread.global
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 05 Apr 2017 16:24:02 -0600 |
parents | 0d884377e923 |
children | 772d16c89056 |
line wrap: on
line diff
--- a/src/luan/modules/ThreadLuan.java Wed Mar 29 19:54:45 2017 -0600 +++ b/src/luan/modules/ThreadLuan.java Wed Apr 05 16:24:02 2017 -0600 @@ -71,14 +71,14 @@ } - public static class StringMap { + public static class GlobalMap { private static class Value { final long time = System.currentTimeMillis(); - final String s; + final Object v; - Value(String s) { - this.s = s; + Value(Object v) { + this.v = v; } } @@ -89,13 +89,21 @@ } }; - public synchronized String get(String key) { + public synchronized Object get(String key) { Value val = map.get(key); - return val==null ? null : val.s; + return val==null ? null : val.v; } - public synchronized void set(String key,String s) { - map.put(key,new Value(s)); + public synchronized Object put(String key,Object v) throws LuanException { + Value val; + if( v == null ) { + val = map.remove(key); + } else { + if( !(v instanceof String || v instanceof Boolean || v instanceof Number) ) + throw new LuanException("can't assign type "+Luan.type(v)+" to Thread.global"); + val = map.put(key,new Value(v)); + } + return val==null ? null : val.v; } } }