Mercurial > hg > ltpda
diff m-toolbox/sltpda/sortCmds.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/sltpda/sortCmds.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,116 @@ +function cmds = sortCmds(cmds) + +% SORTCMDS sort a command list so that all inputs and outputs are valid. +% +% M Hewitson 27-03-07 +% + +disp(' + sorting command list'); + +nswapped = 1; +while nswapped > 0 + + nswapped = 0; + % first assign numbers + for j=1:length(cmds) + cmds(j).n = j; + end + + nc = length(cmds); + for j=1:nc + + cmd = cmds(j); + % if I have inputs, find the commands + % that come before me + cs = []; + if ~isempty(cmd.ins) + % go through my inputs + for i=1:length(cmd.ins) + input = cmd.ins{i}; + % check against all commands + for k=1:nc + outputs = cmds(k).outs; + for o=1:length(outputs) + if strcmp(outputs{o}, input) + cs = [cs k]; + end + end + end + end + end + + % go through these + for k=1:length(cs) + csj = cs(k); + cmdn = j; + + if csj > cmdn +% disp(sprintf('** swapping %d and %d', csj, cmdn)) + nswapped = nswapped + 1; + c1 = cmds(csj); + c2 = cmds(cmdn); + % swap + cmds(cmdn) = c1; + cmds(csj) = c2; + end + end + + end + + % they should be sorted now so renumber + for j=1:length(cmds) + cmds(j).n = j; + end + +end + +% DON'T NEED THIS + +% now remove unnecessary commands +% - find all commands whose output is not an input +useful = []; +newcmds = []; +for k=1:length(cmds) + + cmd = cmds(k); + outs = cmd.outs; + + % go through each of my outputs + hasUse = 0; + for j=1:length(outs) + out = char(outs{j}); + % check against all other inputs + for i=k+1:length(cmds) + ccmd = cmds(i); + ins = ccmd.ins; + for a=1:length(ins) + in = char(ins(a)); +% disp(sprintf('------- checking out(%s) against in(%s) ', out, +% in)) + if strcmp(out, in) + hasUse = 1; + end + end + end + end + % All sinks fail this test but we don't want to discard them. In fact, we + % only want to discard lines that have an output and this output is not + % used. + if isempty(outs) + hasUse = 1; + end + +% if hasUse + newcmds = [newcmds cmd]; +% else +% disp(sprintf('## Discarding %s', cmd.cmd)) +% end +% +end + +% now we have a slightly reduced list. The next step of cleaning up should +% come in the fncs that run and write m files. +cmds = newcmds; + + +% END \ No newline at end of file