summary refs log tree commit diff stats
path: root/tests/run/teventemitter.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2011-11-19 15:45:51 +0100
committerAraq <rumpf_a@web.de>2011-11-19 15:45:51 +0100
commita274f3bf5be3fc35f1538e5aab0e32fb9ed2ff82 (patch)
tree95dc5bf7fe3716a3ab266f78094fccce38c94ccf /tests/run/teventemitter.nim
parentd0772feb08baaea12bfdad0a7c20a41733f977bd (diff)
downloadNim-a274f3bf5be3fc35f1538e5aab0e32fb9ed2ff82.tar.gz
got rid of 'accept' dir in the tests
Diffstat (limited to 'tests/run/teventemitter.nim')
-rw-r--r--tests/run/teventemitter.nim31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/run/teventemitter.nim b/tests/run/teventemitter.nim
new file mode 100644
index 000000000..8394776a8
--- /dev/null
+++ b/tests/run/teventemitter.nim
@@ -0,0 +1,31 @@
+discard """
+  output: "pie"
+"""
+
+import tables, lists
+
+type
+  TEventArgs = object of TObject
+  TEventEmitter = object of TObject
+    events*: TTable[string, TDoublyLinkedList[proc(e: TEventArgs)]]
+
+proc emit*(emitter: TEventEmitter, event: string, args: TEventArgs) =
+  for func in nodes(emitter.events[event]):
+    func.value(args) #call function with args.
+
+proc on*(emitter: var TEventEmitter, event: string, func: proc(e: TEventArgs)) =
+  if not hasKey(emitter.events, event):
+    var list: TDoublyLinkedList[proc(e: TEventArgs)]
+    add(emitter.events, event, list) #if not, add it.
+  append(emitter.events.mget(event), func)
+
+proc initEmitter(emitter: var TEventEmitter) =
+  emitter.events = initTable[string, TDoublyLinkedList[proc(e: TEventArgs)]]()
+
+var 
+  ee: TEventEmitter
+  args: TEventArgs
+initEmitter(ee)
+ee.on("print", proc(e: TEventArgs) = echo("pie"))
+ee.emit("print", args)
+