diff options
author | Araq <rumpf_a@web.de> | 2011-11-19 15:45:51 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2011-11-19 15:45:51 +0100 |
commit | a274f3bf5be3fc35f1538e5aab0e32fb9ed2ff82 (patch) | |
tree | 95dc5bf7fe3716a3ab266f78094fccce38c94ccf /tests/run/teventemitter.nim | |
parent | d0772feb08baaea12bfdad0a7c20a41733f977bd (diff) | |
download | Nim-a274f3bf5be3fc35f1538e5aab0e32fb9ed2ff82.tar.gz |
got rid of 'accept' dir in the tests
Diffstat (limited to 'tests/run/teventemitter.nim')
-rw-r--r-- | tests/run/teventemitter.nim | 31 |
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) + |