class Motorist(object): def __init__(self,f, pi, W, c, t): self.f = f self.pi = pi self.W = W self.c = c self.cprime = W*((c+W-1)/W) self.t = t self.Rs = W*((f.width-max(32,c)) / W) / 8 self.Ra = W*((f.width-32) / W) / 8 pistons = [Piston(f,self.Rs,self.Ra) for i in range(0,pi)] self.engine = Engine(pistons) self.phase = Phase.Ready def startEngine(self, SUV, tagFlag, T, unwrapFlag, forgetFlag): assert(self.phase == Phase.Ready) self.engine.injectCollective(SUV,True) if forgetFlag: self._makeKnot() r = self._handleTag(tagFlag, T, unwrapFlag) if r: self.phase = Phase.Riding return r def wrap(self, I, O, A, T, unwrapFlag, forgetFlag): assert(self.phase == Phase.Riding) ## i really dont understand the why in this statement if not I.hasMore() and not A.hasMore(): self.engine.inject(A) while I.hasMore(): self.engine.crypt(I, O, unwrapFlag) self.engine.inject(A) while(A.hasMore()): self.engine.inject(A) if self.pi > 1 or forgetFlag: self._makeKnot() r = self._handleTag(True, T, unwrapFlag) if not r: O.erase() return r def _makeKnot(self,): Tprime = Buffer() self.engine.getTags(Tprime, [self.cprime / 8]*self.pi) Tprime.seek(0) self.engine.injectCollective(Tprime, False) def _handleTag(self, tagFlag, T, unwrapFlag): Tprime = Buffer() if not tagFlag: self.engine.getTags(Tprime, [0]*self.pi) else: l = [0] * self.pi l[0] = self.t/8 self.engine.getTags(Tprime, l) if not unwrapFlag: T.clone(Tprime) elif Tprime != T: self.phase = Phase.Failed return False return True