# -*- coding: utf-8 -*-

from vm import ovm

class virtualmachine(object):
    class mapper(object):
        def __init__(self, setter, getter):
            self.setter = setter
            self.getter = getter
        def __getitem__(self, key):
            return self.setter(key)
        def __setitem__(self, key, value):
            return self.getter(key, value)

    def __init__(self):
        self.vm = ovm()
        self.input = virtualmachine.mapper(self.vm.read_input, self.vm.write_input)
        self.port = virtualmachine.mapper(self.vm.read_output, self.vm.write_output)

    def load(self, *a, **k):
        return self.vm.load(*a, **k)

    def __iter__(self):
        while True:
            self.vm.exec_clocktick()
            yield self.port
