def LoopPre(c, ef1, c_type=None): ef = None def prepare(): ef1.prepare() for l in ef.listeners.itervalues(): l.prepare() def push(x): ef1.push((x, ef.cell.get())) def push2((y1, y2)): ef.cell.set(y2) for l in ef.listeners.itervalues(): l.push(y1) def finish(): ef1.finish() for l in ef.listeners.itervalues(): l.finish() def terminate(): ef1.terminate() for l in ef.listeners.itervalues(): l.terminate() def type_fun(a): if a is None or c_type is None: return None eftype = ef1.type_fun(types.FType((a.type, c_type.type))) if eftype is None: return None (b, c) = eftype.type if not types.is_of_type(c_type, types.FType(c)): raise types.FTypeException("%s is not of type %s" % (c, c_type)) return types.FType(b) ef = FEventFun(prepare=prepare, push=push, finish=finish, terminate=terminate, type_fun=type_fun) ef.cell = util.FRef() ef.cell.set(c) ef1.add_listener(FListener(push=push2)) return ef
def First(ef1): ef = None def prepare(): ef1.prepare() for l in ef.listeners.itervalues(): l.prepare() def push((x1, x2)): ef.cell.set(x2) ef1.push(x1) def push2(y1): y2 = ef.cell.get() for l in ef.listeners.itervalues(): l.push((y1, y2)) def finish(): ef1.finish() for l in ef.listeners.itervalues(): l.finish() def terminate(): ef1.terminate() for l in ef.listeners.itervalues(): l.terminate() def type_fun(in_type): if in_type is None: return None try: (a, c) = in_type.type except ValueError: raise types.FTypeException("%s not of type (a * c)" % in_type) return types.FType((ef1.type_fun(types.FType(a)).type, c)) ef = FEventFun(prepare=prepare, push=push, finish=finish, terminate=terminate, type_fun=type_fun) ef.cell = util.FRef() ef1.add_listener(FListener(push=push2)) return ef
def LoopPre(c, ef1, c_type=None): ef = None def prepare(): ef1.prepare() for l in ef.listeners.itervalues(): l.prepare() def push(x): ef1.push((x,ef.cell.get())) def push2((y1,y2)): ef.cell.set(y2) for l in ef.listeners.itervalues(): l.push(y1) def finish(): ef1.finish() for l in ef.listeners.itervalues(): l.finish() def terminate(): ef1.terminate() for l in ef.listeners.itervalues(): l.terminate() def type_fun(a): if a is None or c_type is None: return None eftype = ef1.type_fun(types.FType((a.type, c_type.type))) if eftype is None: return None (b, c) = eftype.type if not types.is_of_type(c_type, types.FType(c)): raise types.FTypeException("%s is not of type %s" % (c, c_type)) return types.FType(b) ef = FEventFun( prepare=prepare, push=push, finish=finish, terminate=terminate, type_fun = type_fun) ef.cell = util.FRef() ef.cell.set(c) ef1.add_listener(FListener(push=push2)) return ef
def First(ef1): ef = None def prepare(): ef1.prepare() for l in ef.listeners.itervalues(): l.prepare() def push((x1,x2)): ef.cell.set(x2) ef1.push(x1) def push2(y1): y2 = ef.cell.get() for l in ef.listeners.itervalues(): l.push((y1,y2)) def finish(): ef1.finish() for l in ef.listeners.itervalues(): l.finish() def terminate(): ef1.terminate() for l in ef.listeners.itervalues(): l.terminate() def type_fun(in_type): if in_type is None: return None try: (a, c) = in_type.type except ValueError: raise types.FTypeException("%s not of type (a * c)" % in_type) return types.FType((ef1.type_fun(types.FType(a)).type, c)) ef = FEventFun( prepare=prepare, push=push, finish=finish, terminate=terminate, type_fun=type_fun) ef.cell = util.FRef() ef1.add_listener(FListener(push=push2)) return ef