actorlib/sim: split TokenExchanger

This commit is contained in:
Sebastien Bourdeauducq 2012-11-17 14:15:51 +01:00
parent eb156af20c
commit 897a2e3f9c
1 changed files with 12 additions and 4 deletions

View File

@ -13,17 +13,17 @@ class Token:
# #
# NB: the possibility to push several tokens at once is important to interact # NB: the possibility to push several tokens at once is important to interact
# with actors that only accept a group of tokens when all of them are available. # with actors that only accept a group of tokens when all of them are available.
class SimActor(PureSimulable, Actor): class TokenExchanger(PureSimulable):
def __init__(self, generator, *endpoint_descriptions, **misc): def __init__(self, actor, generator):
self.actor = actor
self.generator = generator self.generator = generator
self.active = set() self.active = set()
self.done = False self.done = False
super().__init__(*endpoint_descriptions, **misc)
def _process_transactions(self, s): def _process_transactions(self, s):
completed = set() completed = set()
for token in self.active: for token in self.active:
ep = self.endpoints[token.endpoint] ep = self.actor.endpoints[token.endpoint]
if isinstance(ep, Sink): if isinstance(ep, Sink):
if s.rd(ep.ack): if s.rd(ep.ack):
if s.rd(ep.stb): if s.rd(ep.stb):
@ -67,3 +67,11 @@ class SimActor(PureSimulable, Actor):
self._next_transactions() self._next_transactions()
if self.active: if self.active:
self._process_transactions(s) self._process_transactions(s)
class SimActor(Actor):
def __init__(self, generator, *endpoint_descriptions, **misc):
super().__init__(*endpoint_descriptions, **misc)
self.token_exchanger = TokenExchanger(self, generator)
def get_fragment(self):
return self.token_exchanger.get_fragment()