Update chains structures

- Fixes chains structure parsing
- Fix Semaphore node parsing
This commit is contained in:
Dhananjay Balan
2013-06-24 09:40:59 +05:30
committed by Chris Johns
parent 56a70aec55
commit 10bcd5d4dc
3 changed files with 21 additions and 14 deletions

View File

@@ -14,15 +14,17 @@ class node:
self.node_val = node_val self.node_val = node_val
def null(self): def null(self):
return self.node_val['next'] == 0 if not self.node_val:
return True
return False
def next(self): def next(self):
if not self.null(): if not self.null():
self.node_val = self.node_val['next'].dereference() self.node_val = self.node_val['next']
def previous(self): def previous(self):
if not self.null(): if not self.null():
self.node_val = self.node_val['previous'].dereference() self.node_val = self.node_val['previous']
def cast(self, typename): def cast(self, typename):
if not self.null(): if not self.null():
@@ -30,6 +32,7 @@ class node:
return self.node_val.cast(nodetype) return self.node_val.cast(nodetype)
return None return None
class control: class control:
"""Manage the Chain_Control.""" """Manage the Chain_Control."""
@@ -37,7 +40,8 @@ class control:
self.ctrl = ctrl self.ctrl = ctrl
def first(self): def first(self):
return node(self.ctrl['first'].dereference()) t = node(self.ctrl['Head']['Node'])
return t
def last(self): def last(self):
return node(self.ctrl['first']) return node(self.ctrl['first'])

View File

@@ -62,6 +62,9 @@ class infotables:
api = id.api() api = id.api()
_class = id._class() _class = id._class()
index = id.index() index = id.index()
return self.object_return(api, _class, index)
def object_return(self, api, _class, index):
n = self.name(api, _class) n = self.name(api, _class)
self.load(n) self.load(n)
max = self.maximum(api, _class) max = self.maximum(api, _class)

View File

@@ -14,7 +14,6 @@ def task_chain(chain):
tasks = [] tasks = []
node = chain.first() node = chain.first()
while not node.null(): while not node.null():
print node.addr
tasks.append(control(node.cast('Thread_Control'))) tasks.append(control(node.cast('Thread_Control')))
node.next() node.next()
return tasks return tasks
@@ -188,7 +187,8 @@ class queue:
else: else:
t = [] t = []
for ph in range(0, self.priority_headers): for ph in range(0, self.priority_headers):
t.extend(task_chain(chains.control(self.que['Queues']['Fifo']))) t.extend(task_chain(chains.control( \
self.que['Queues']['Priority'][ph])))
return t return t
def to_string(self): def to_string(self):