diff src/luan/modules/Thread.luan @ 1322:d5739c101bd6

improve Thread
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 06 Feb 2019 01:11:12 -0700
parents 70eecde81820
children 8d95711f6615
line wrap: on
line diff
--- a/src/luan/modules/Thread.luan	Tue Feb 05 22:36:55 2019 -0700
+++ b/src/luan/modules/Thread.luan	Wed Feb 06 01:11:12 2019 -0700
@@ -4,6 +4,7 @@
 local error = Luan.error
 local set_metatable = Luan.set_metatable or error()
 local try = Luan.try or error()
+local Time = require "luan:Time.luan"
 local Logging = require "luan:logging/Logging.luan"
 local logger = Logging.logger "Thread"
 
@@ -34,35 +35,11 @@
 end
 
 
---[[
-Thread.global = {}  -- shared across threads
-local map = ThreadLuan.GlobalMap.new()
-local global_mt = {}
-set_metatable(Thread.global,global_mt)
-
-function global_mt.__index(_,key)
-	return map.get(key)
-end
-
-function global_mt.__new_index(_,key,value)
-	map.put(key,value)
-end
+local forever = Time.period{years=100}
 
-function Thread.get_global_timeout()
-	return map.timeout
-end
-
-function Thread.set_global_timeout(timeout)
-	map.timeout = timeout
-end
-
-function Thread.global_put(key,value)
-	return map.put(key,value)
-end
-]]
-
-function Thread.global_callable(name,timeout,fns)
-	local callable = ThreadLuan.globalCallable(name,timeout,fns)
+function Thread.global_callable(name,fns,timeout)
+	timeout = timeout or forever
+	local callable = ThreadLuan.globalCallable(name,fns,timeout)
 	local mt = {}
 	function mt.__index(_,key)
 		return function(...)
@@ -76,35 +53,31 @@
 
 Thread.remove_global_callable = ThreadLuan.removeGlobalCallable
 
+function Thread.global_map(name,timeout)
+	timeout = timeout or forever
 
-local map = {}
-local fns = {}
+	local map = {}
+	local fns = {}
+
+	function fns.get(key)
+		return map[key]
+	end
 
-function fns.get(key)
-	return map[key]
-end
+	function fns.put(key,value)
+		map[key] = value
+	end
 
-function fns.put(key,value)
-	map[key] = value
+	local callable = ThreadLuan.globalCallable(name,fns,timeout)
+	local mt = {}
+	function mt.__index(_,key)
+		return callable.call("get",key)
+	end
+	function mt.__new_index(_,key,value)
+		return callable.call("put",key,value)
+	end
+	local tbl = {}
+	set_metatable(tbl,mt)
+	return tbl
 end
 
-Thread.global = {}  -- shared across threads
-local global_mt = {}
-set_metatable(Thread.global,global_mt)
-
-function global_mt.__index(_,key)
-	return global_mt.fns.get(key)
-end
-
-function global_mt.__new_index(_,key,value)
-	global_mt.fns.put(key,value)
-end
-
-function Thread.set_global_timeout(timeout)
-	global_mt.fns = Thread.global_callable("Thread.global",timeout,fns)
-end
-
-Thread.set_global_timeout(60000)  -- one minute
-
-
 return Thread