diff m-toolbox/classes/@ssmblock/findPorts.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/@ssmblock/findPorts.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,113 @@
+% MAKEPORTINDEX gives indexes of selected in a series of list in a cell array
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DESCRIPTION: MAKEPORTINDEX2 gives a an array of port positions
+%
+% CALL: [blockNumber portNumber] = makePortIndex(varargin)
+%
+%       makePortIndex(ssmblock, cellstr)
+%       makePortIndex(ssmblock, str)
+%
+% INPUTS:
+%       select - input index:
+%                         - cellstr,
+%                         - cell array including
+%                                 - 'ALL'/'NONE' to index all/no content,
+%                                 - chars with port/block names
+%                         - a str for one variable name only, 'ALL'/'NONE'
+%
+% OUTPUTS:
+%       blockNumber - block index
+%       portNumber  - port index
+%
+% ***** There are no parameters *****
+%
+% VERSION: '$Id: findPorts.m,v 1.3 2010/08/27 12:55:30 adrien Exp $'
+%
+%
+% HISTORY:
+% 24-09-2008 A Grynagier
+%
+% TO DO :
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function [blockNumber portNumber] = findPorts(block, data)
+  error('This function is deprecated and will be deleted')
+
+
+  if ~isa(block, 'ssmblock')
+    error('block is not an ssmblock object')
+  end
+  if ischar(data)
+    data = {data};
+  end
+  
+  if iscellstr(data)
+    if numel(data) == 1 && strcmpi(data{1}, 'all')
+      [blockNumber portNumber] = forAll(block);
+    elseif numel(data) == 1 && strcmpi(data{1}, 'none')
+      [blockNumber portNumber] = forNone();
+    else
+      [blockNumber portNumber] = fromNames(block, data);      
+    end
+  else
+    display(data)
+    error('parameter ''data'' is of wrong type')
+  end
+end
+
+function [blockNumber portNumber] = forAll(block)
+  nBlocks = numel(block) ;
+  nPorts = block.Nports;
+  nPortsTot = sum(nPorts);
+  
+  blockNumber = zeros(nPortsTot,1);
+  portNumber = zeros(nPortsTot,1);
+  
+  k = 1;
+  for i=1:nBlocks
+    for j=1:nPorts(i)
+      blockNumber(k) = i;
+      portNumber(k) = j;
+      k = k+1;
+    end
+  end
+end
+
+function [blockNumber portNumber] = forNone()
+  blockNumber = zeros(1,0);
+  portNumber = zeros(1,0);
+end
+
+function [blockNumber portNumber] = fromNames(block, data)  
+  nBlocks = numel(block) ;
+  nPorts = block.Nports;
+  
+  blockNumber = zeros(1,0);
+  portNumber = zeros(1,0);
+  portNames = block.portNames;
+  
+  for i=1:numel(data)
+    [isin, pos] = posBlock(block, data{i});
+    if isin
+      % indexing full block
+      blockNumber = [blockNumber ones(1,nPorts(pos))*pos];  %#ok<AGROW>
+      portNumber  = [portNumber  1:nPorts(pos)];  %#ok<AGROW>
+    else
+      % looking for a port to index
+      for ii = 1:nBlocks
+        found = strcmpi(portNames{ii}, data{i});
+        wasFound = sum(found)>0;
+        if wasFound;
+          blockNumber = [blockNumber ii]; %#ok<AGROW>
+          portNumber  = [portNumber  find(found)];  %#ok<AGROW>
+          break
+        end
+      end
+      if ~wasFound
+        display(['block or port '  data{i} ' was not found!'])
+      end
+    end
+  end
+end
+