X-Git-Url: https://git.ucc.asn.au/?p=zanchey%2Fdispense2.git;a=blobdiff_plain;f=sql-edition%2Fservers%2FIdler.py;h=5ffea0bf548b414e13f40dbd73927fa4fc4e19c3;hp=ecf3e361868104f09fa61031c582675dcd3ee916;hb=ecfe7381977787a6bfa09c6c96d99c315265e284;hpb=c8fdfd50de52c0f4ffd98a1960398dd02ee42a61;ds=sidebyside diff --git a/sql-edition/servers/Idler.py b/sql-edition/servers/Idler.py index ecf3e36..5ffea0b 100755 --- a/sql-edition/servers/Idler.py +++ b/sql-edition/servers/Idler.py @@ -1,6 +1,9 @@ #!/usr/bin/env python import string +from random import random + +orderings = None class Idler: def __init__(self, v): @@ -9,6 +12,9 @@ class Idler: def next(self): pass + def reset(self): + pass + class TrainIdler(Idler): def __init__(self, v): self.idle_state = 0 @@ -68,8 +74,37 @@ class TrainIdler(Idler): self.idle_state += 1 self.idle_state %= 18*36*54 + def reset(self): + self.idle_state = 0 + +class OrderMaker: + def __init__(self, n=8): + self.n = n + self.a = [] + self.u = [] + self.s = [] + for x in range(0,n): + self.u.append(False) + self.go() + + def go(self): + from copy import deepcopy + if len(self.s) == self.n: + self.a.append(deepcopy(self.s)) + else: + for x in range(0,self.n): + if self.u[x]: continue + self.s.append(x) + self.u[x] = True + self.go() + self.u[x] = False + self.s.pop() + + def order(self): + return self.a + class GrayIdler(Idler): - def __init__(self, v, one=None, zero=None): + def __init__(self, v, one=None, zero=None, reorder=0): self.bits = 8 self.size = 1 << self.bits self.i = 0 @@ -77,6 +112,10 @@ class GrayIdler(Idler): self.v = v self.one = one self.zero = zero + self.reorder = reorder + global orderings + if not orderings: + orderings = OrderMaker().order() def next(self): output = self.do_next_state() @@ -85,6 +124,12 @@ class GrayIdler(Idler): output = string.replace(output, "0", self.zero) if self.one: output = string.replace(output, "1", self.one) + if self.reorder: + global orderings + newoutput = "" + for i in range(0,8): + newoutput += output[orderings[self.reorder][i]] + output = newoutput self.v.display(" %8.8s " % (output)) self.i = (self.i + 1) % self.size @@ -129,5 +174,8 @@ class GrayIdler(Idler): return bin - - + def reset(self): + self.i = 0 + self.grayCode = 0 + if self.reorder: + self.reorder = int(random()*40319)+1