def _set_state(self, state): self.fifo = [Token.decode(d) for d in state['fifo']] self.N = state['N'] self.readers = set(state['readers']) self.write_pos = state['write_pos'] self.read_pos = state['read_pos'] self.tentative_read_pos = state['tentative_read_pos']
def __init__(self, length): super(FIFO, self).__init__() self.fifo = [Token(0)] * length self.N = length self.readers = set() # NOTE: For simplicity, modulo operation is only used in fifo access, # all read and write positions are monotonousy increasing self.write_pos = 0 self.read_pos = {} self.tentative_read_pos = {}
def _set_state(self, state): for reader in state['fifo']: if state.get('catchup_fifo_key') in self.fifo: self.fifo[reader] = self.fifo[state['catchup_fifo_key']] self.write_pos[reader] = self.write_pos[state['catchup_fifo_key']] else: if not state['fifo'][reader]: self.fifo[reader] = [Token(0)] * self.N else: self.fifo[reader] = [Token.decode(token) for token in state['fifo'][reader]] self.write_pos[reader] = state['write_pos'][reader] self.N = state['N'] self.readers.update(set(state['readers'])) self.read_pos.update(state['read_pos']) self.tentative_read_pos.update(state['tentative_read_pos'])