from cofunctions import *
__all__ = ['now', 'run', 'hold', 'wakeup', 'start']
current_time = 0.0
def now():
	return current_time
from heapq import heappush, heappop
event_queue = []
def schedule(process, time):
	heappush(event_queue, (time, process))
current_process = None
def run():
	global current_time, current_process
	while event_queue:
		current_time, current_process = heappop(event_queue)
		try:
			next(current_process)
		except StopIteration:
			pass
@cofunction
def hold(cocall, delay):
	schedule(current_process, now() + delay)
	yield
def wakeup(process):
	schedule(process, now())
def start(cofunction, *args, **kwds):
	wakeup(costart(cofunction, *args, **kwds))
def enqueue(queue):
	queue.append(current_process)