function subcall_string = subcall_all2str(varargin) % % subcall_string = subcall_all2str(varargin) % % create a string from varargin allowing following types: % % char: varargin is just copied % numeric: if scalar use num2str, if 1 or 2-D array add relevant '[' and ']', else mark a string multi-D % structure: explode structure as field,value % % to be taken from above and include this call in above if nargin==0 subcall_string = ''; return end subcall = ''; for i_in=1:length(varargin) var_to_treat = varargin{i_in}; if isempty(var_to_treat) subcall = [subcall ',[]']; elseif isstruct(var_to_treat) % explode structure into 'childname',childvalues param_names = fieldnames(var_to_treat); for i=1:length(param_names) subcall = [subcall ',''' param_names{i} '''']; if ischar(var_to_treat.(param_names{i})) subcall = [subcall ',''' var_to_treat.(param_names{i}) '''']; elseif isnumeric(var_to_treat.(param_names{i})) aa_values = var_to_treat.(param_names{i}); if prod(size(aa_values))~= length(aa_values) % multi-D input, do not treat it yet subcall = [subcall ',''multi-D input''']; elseif length(aa_values) > 1 % array subcall = [subcall ',[' num2str(reshape(aa_values,1,length(aa_values))) ']']; else subcall = [subcall ',' num2str(aa_values) '']; end else % to treat extra cases end end elseif isnumeric(var_to_treat) if prod(size(var_to_treat))~= length(var_to_treat) % multi-D input, do not treat it yet subcall = [subcall ',''multi-D input''']; elseif length(var_to_treat) > 1 % array subcall = [subcall ',[' num2str(var_to_treat) ']']; else subcall = [subcall ',' num2str(var_to_treat) '']; end elseif ischar(var_to_treat) subcall = [subcall ',''' var_to_treat '''']; elseif iscell(var_to_treat) subcall = [subcall ',{''' var_to_treat{1} '''']; for i=2:length(var_to_treat) subcall = [subcall ',''' var_to_treat{i} '''']; end subcall = [subcall '}']; else warning('in subcall_all2str: case not foreseen'); end end subcall_string = subcall;