Files
GS13NG/code/datums/callback.dm.rej
2017-08-13 17:41:12 -05:00

63 lines
2.0 KiB
Plaintext

diff a/code/datums/callback.dm b/code/datums/callback.dm (rejected hunks)
@@ -100,60 +100,3 @@
if (object == GLOBAL_PROC)
return call(delegate)(arglist(calling_arguments))
return call(object, delegate)(arglist(calling_arguments))
-
-
-/datum/callback_select
- var/list/finished
- var/pendingcount
- var/total
-
-/datum/callback_select/New(count, savereturns)
- total = count
- if (savereturns)
- finished = new(count)
-
-
-/datum/callback_select/proc/invoke_callback(index, datum/callback/callback, list/callback_args, savereturn = TRUE)
- set waitfor = FALSE
- if (!callback || !istype(callback))
- //This check only exists because the alternative is callback_select would block forever if given invalid data
- CRASH("invalid callback passed to invoke_callback")
- if (!length(callback_args))
- callback_args = list()
- pendingcount++
- debug_usr("calling callback")
- var/rtn = callback.Invoke(arglist(callback_args))
- debug_usr("callback returned")
- pendingcount--
- if (savereturn)
- finished[index] = rtn
-
-
-
-
-//runs a list of callbacks asynchronously, returning once all of them return.
-//callbacks can be repeated.
-//callbacks-args is a optional list of argument lists, in the same order as the callbacks,
-// the inner lists will be sent to the callbacks when invoked() as additional args.
-//can optionly save and return a list of return values, in the same order as the original list of callbacks
-//resolution is the number of byond ticks between checks.
-/proc/callback_select(list/callbacks, list/callback_args, savereturns = TRUE, resolution = 1)
- if (!callbacks)
- return
- var/count = length(callbacks)
- if (!count)
- return
- if (!callback_args)
- callback_args = list()
-
- callback_args.len = count
-
- var/datum/callback_select/CS = new(count, savereturns)
- for (var/i in 1 to count)
- CS.invoke_callback(i, callbacks[i], callback_args[i], savereturns)
- debug_usr("starting callbacks: [CS.pendingcount]")
- while(CS.pendingcount)
- debug_usr("callbacks: [CS.pendingcount]")
- sleep(resolution*world.tick_lag)
- return CS.finished
-