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;
 		}
 	}
 }