scripts: add dir state transition analysis script

This commit is contained in:
wangkaifan 2021-09-06 22:58:00 +08:00
parent 562a806784
commit 5f5c88f558
1 changed files with 84 additions and 0 deletions

View File

@ -0,0 +1,84 @@
# define some consts
Invalid = 0
Trunk = 1
Branch = 2
Tip = 3
Dirty = 0
Clean = 1
stateDumpMap = dict([(Invalid, 'Invalid'), (Trunk, 'Trunk'), (Branch, 'Branch'), (Tip, 'Tip')])
class SelfDir:
def __init__(self):
pass
def deserialize(self, num):
self.clientStates = num // 64
self.dirty = (num % 64) // 32
self.block = (num % 32) // 8
self.state = (num % 8) // 2
self.hit = (num % 2)
return self
def serialize(self):
return self.hit + self.state * 2 + self.block * 8 + self.dirty * 32 + self.clientStates * 64
def dump(self):
print(stateDumpMap[self.state])
nrPossible = 256
class ClientDir:
def __init__(self):
pass
def deserialize(self, num):
self.block = num // 8
self.state = (num % 8) // 2
self.hit = (num % 2)
return self
def serialize(self):
return self.hit + self.state * 2 + self.block * 8
def dump(self):
print(stateDumpMap[self.state])
nrPossible = 32
class DirStatus:
def __init__(self):
pass
def deserialize(self, num):
selfDir = SelfDir()
clientDir = ClientDir()
self.selfDir = selfDir.deserialize(num // ClientDir.nrPossible)
self.clientDirs = clientDir.deserialize(num % ClientDir.nrPossible)
return self
def isValid(self):
return True
def dump(self):
print('=============')
self.selfDir.dump()
self.clientDir.dump()
nrPossible = ClientDir.nrPossible * SelfDir.nrPossible
if __name__ == '__main__':
dirStatusList = []
for i in range(DirStatus.nrPossible):
dirStatus = DirStatus()
if dirStatus.deserialize(i).isValid():
dirStatusList.append(dirStatus.deserialize(i))
for item in dirStatusList:
item.dump()