Mercurial > hg > ltpda
diff m-toolbox/classes/@LTPDAworkbench/parseCmd.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/@LTPDAworkbench/parseCmd.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,100 @@ +% PARSECMD parses a command string comming from hist2m to information +% needed to build a block. +% +% CALL: out = parseCmd(cmd) +% +% Returns a structure: +% +% out.outname +% out.outports +% out.innames +% out.inports +% out.method +% out.class +% out.plists +% +% M Hewitson 12-11-10 +% +% $Id: parseCmd.m,v 1.3 2010/08/06 19:10:49 ingo Exp $ +% +function out = parseCmd(cmd) + + pcmd = LTPDAworkbench.parse(cmd); + + % check for block name from comment + blockname = ''; + methodclass = ''; + if ~isempty(pcmd.comment) + % look for block name + st = regexp(pcmd.comment, '\|', 'split'); + if numel(st)==2 + blockname = strrep(strtrim(st{2}), ' ', '_'); + else + blockname = ''; + end + % and method class + methodclass = strtrim(st{1}); + end + + % get output ports + outnames = pcmd.outvars; + outports = zeros(size(outnames)); + for kk=1:numel(outnames) + pstrs = regexp(outnames{kk}, '_PORT(\d*)', 'tokens'); + if ~isempty(pstrs) + outports(kk) = str2double(pstrs{1}{1}); + end + end + + % get input ports + innames = pcmd.invars; + inports = zeros(size(innames)); + for kk=1:numel(innames) + pstrs = regexp(innames{kk}, '_PORT(\d*)', 'tokens'); + if ~isempty(pstrs) + inports(kk) = str2double(pstrs{1}{1}); + end + end + + % either take the block name from the comment, or + % from the first output name + if isempty(blockname) + if numel(outnames) > 0 + blockname = outnames{1}; + else + blockname = 'unknown'; + end + end + + % If methodclass is empty, we need an alternative + % = just look for the first class method of LTPDA that + % matches the function name + if isempty(methodclass) + cls = utils.helper.ltpda_userclasses; + for kk=1:numel(cls) + cl = cls{kk}; + mts = methods(cl); + for ll=1:numel(mts) + mt = mts{ll}; + if strcmp(mt, pcmd.method) + methodclass = cl; + break; + end + end + end + end + if isempty(methodclass) + error('### Unable to determine the class of method: %s', pcmd.method); + end + + out.outname = strtrim(blockname); + out.outports = outports; + out.innames = pcmd.invars; + out.inports = inports; + out.method = pcmd.method; + out.class = methodclass; + out.plists = pcmd.pls; + +end + +