diff options
author | Sebastian Koslowski <koslowski@kit.edu> | 2014-09-17 12:36:58 -0400 |
---|---|---|
committer | Sebastian Koslowski <koslowski@kit.edu> | 2014-11-07 11:31:53 +0100 |
commit | ac726bdd0aac71cbd85c7dcb11c718cd7e2732d7 (patch) | |
tree | d23f11867c205d63061a77e718abfd47be18be65 /grc/python/FlowGraph.py | |
parent | 4a517e173699d8338b08aacc456f4d18c2ba8adf (diff) |
grc: refactor/enhance hier block generation
Diffstat (limited to 'grc/python/FlowGraph.py')
-rw-r--r-- | grc/python/FlowGraph.py | 80 |
1 files changed, 51 insertions, 29 deletions
diff --git a/grc/python/FlowGraph.py b/grc/python/FlowGraph.py index daec2d4310..977200da66 100644 --- a/grc/python/FlowGraph.py +++ b/grc/python/FlowGraph.py @@ -58,34 +58,62 @@ class FlowGraph(_FlowGraph, _GUIFlowGraph): #return from cache return self._eval_cache[my_hash] - def get_io_signaturev(self, direction): + def get_hier_block_stream_io(self, direction): """ - Get a list of io signatures for this flow graph. + Get a list of stream io signatures for this flow graph. Args: direction: a string of 'in' or 'out' Returns: - a list of dicts with: type, label, vlen, size + a list of dicts with: type, label, vlen, size, optional """ - sorted_pads = { - 'in': self.get_pad_sources(), - 'out': self.get_pad_sinks(), - }[direction] - # we only want stream ports - sorted_pads = filter(lambda b: b.get_param('type').get_evaluated() != 'message', sorted_pads); - expanded_pads = []; - for i in sorted_pads: - for j in range(i.get_param('num_streams').get_evaluated()): - expanded_pads.append(i); - #load io signature - return [{ - 'label': str(pad.get_param('label').get_evaluated()), - 'type': str(pad.get_param('type').get_evaluated()), - 'vlen': str(pad.get_param('vlen').get_value()), - 'size': pad.get_param('type').get_opt('size'), - 'optional': bool(pad.get_param('optional').get_evaluated()), - } for pad in expanded_pads] + return filter(lambda p: p['type'] != "message", + self.get_hier_block_io(direction)) + + def get_hier_block_message_io(self, direction): + """ + Get a list of message io signatures for this flow graph. + + Args: + direction: a string of 'in' or 'out' + + Returns: + a list of dicts with: type, label, vlen, size, optional + """ + return filter(lambda p: p['type'] == "message", + self.get_hier_block_io(direction)) + + def get_hier_block_io(self, direction): + """ + Get a list of io ports for this flow graph. + + Args: + direction: a string of 'in' or 'out' + + Returns: + a list of dicts with: type, label, vlen, size, optional + """ + pads = self.get_pad_sources() if direction in ('sink', 'in') else \ + self.get_pad_sinks() if direction in ('source', 'out') else [] + ports = [] + for pad in pads: + master = { + 'label': str(pad.get_param('label').get_evaluated()), + 'type': str(pad.get_param('type').get_evaluated()), + 'vlen': str(pad.get_param('vlen').get_value()), + 'size': pad.get_param('type').get_opt('size'), + 'optional': bool(pad.get_param('optional').get_evaluated()), + } + num_ports = pad.get_param('num_streams').get_evaluated() + if num_ports > 1: + for i in xrange(num_ports): + clone = master.copy() + clone['label'] += str(i) + ports.append(clone) + else: + ports.append(master) + return ports def get_pad_sources(self): """ @@ -118,20 +146,14 @@ class FlowGraph(_FlowGraph, _GUIFlowGraph): key_offset = 0 pads = self.get_pad_sources() if port.is_source() else self.get_pad_sinks() for pad in pads: + if pad.get_param('type').get_evaluated() == "message": + continue if port.get_parent() == pad: return str(key_offset + int(port.get_key())) # assuming we have either only sources or sinks key_offset += len(pad.get_ports()) return -1 - def get_msg_pad_sources(self): - ps = self.get_pad_sources(); - return filter(lambda b: b.get_param('type').get_evaluated() == 'message', ps); - - def get_msg_pad_sinks(self): - ps = self.get_pad_sinks(); - return filter(lambda b: b.get_param('type').get_evaluated() == 'message', ps); - def get_imports(self): """ Get a set of all import statments in this flow graph namespace. |