Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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