Esempio n. 1
0
class BubblesortProgramSet:
    NOP = Program('NOP')
    MOVE_PTR = MovePtrProgram('MOVE_PTR', 3, 2)
    SWAP = SwapProgram('SWAP')
    BUBBLESORT = Program('BUBBLESORT')
    BUBBLE = Program('BUBBLE')
    RESET = Program('RESET')
    BSTEP = Program('BSTEP')
    COMPSWAP = Program('COMPSWAP')
    LSHIFT = Program('LSHIFT')
    RSHIFT = Program('RSHIFT')

    def __init__(self):
        self.map = {}
        self.program_id = 0
        self.register(self.NOP)
        self.register(self.MOVE_PTR)
        self.register(self.SWAP)
        self.register(self.BUBBLESORT)
        self.register(self.BUBBLE)
        self.register(self.RESET)
        self.register(self.BSTEP)
        self.register(self.COMPSWAP)
        self.register(self.LSHIFT)
        self.register(self.RSHIFT)

    def register(self, pg: Program):
        pg.program_id = self.program_id
        self.map[pg.program_id] = pg
        self.program_id += 1

    def get(self, i: int):
        return self.map.get(i)
class AdditionProgramSet:
    NOP = Program('NOP')
    MOVE_PTR = MovePtrProgram('MOVE_PTR', 4, 2)  # PTR_KIND(4), LEFT_OR_RIGHT(2)
    WRITE = WriteProgram('WRITE', 2, 10)       # CARRY_OR_OUT(2), DIGITS(10)
    ADD = Program('ADD')
    ADD1 = Program('ADD1')
    CARRY = Program('CARRY')
    LSHIFT = Program('LSHIFT')
    RSHIFT = Program('RSHIFT')

    def __init__(self):
        self.map = {}
        self.program_id = 0
        self.register(self.NOP)
        self.register(self.MOVE_PTR)
        self.register(self.WRITE)
        self.register(self.ADD)
        self.register(self.ADD1)
        self.register(self.CARRY)
        self.register(self.LSHIFT)
        self.register(self.RSHIFT)

    def register(self, pg: Program):
        pg.program_id = self.program_id
        self.map[pg.program_id] = pg
        self.program_id += 1

    def get(self, i: int):
        return self.map.get(i)
Esempio n. 3
0
class MultiplicationProgramSet:  # includes the addition Programset
    MUL = Program('MUL')  # multiply mul1 and mul2, when mul2 == 0, stop.
    COPY = CopyProgram(
        'COPY'
    )  # copy whatever on the fourth row(the output row) and write on the second row(In2)
    SUB = SubtractProgram('SUB')  # subtract mul2 by 1
    NOP = Program('NOP')
    MOVE_PTR = MovePtrProgram('MOVE_PTR', 4,
                              2)  # PTR_KIND(4), LEFT_OR_RIGHT(2)
    RESET_PTR = ResetPtrProgram('RESET_PTR',
                                4)  # PTR_KIND(4), LEFT_OR_RIGHT(2)
    WRITE = WriteProgram('WRITE', 2, 10)  # INCARRY_OR_OUT(2), DIGITS(10)
    ADD = Program('ADD')
    ADD1 = Program('ADD1')
    CARRY = Program('CARRY')
    LSHIFT = Program('LSHIFT')
    RSHIFT = Program('RSHIFT')

    def __init__(self):
        self.map = {}
        self.program_id = 0
        self.register(self.MUL)
        self.register(self.SUB)
        self.register(self.COPY)
        self.register(self.NOP)
        self.register(self.MOVE_PTR)
        self.register(self.RESET_PTR)
        self.register(self.WRITE)
        self.register(self.ADD)
        self.register(self.ADD1)
        self.register(self.CARRY)
        self.register(self.LSHIFT)
        self.register(self.RSHIFT)

    def register(self, pg: Program):
        pg.program_id = self.program_id
        self.map[pg.program_id] = pg
        self.program_id += 1

    def get(self, i: int):
        return self.map.get(i)