Mercurial > hg > ltpda
diff m-toolbox/classes/+utils/@helper/objdisp.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/+utils/@helper/objdisp.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,180 @@ +% OBJDISP displays the input object. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: OBJDISP displays the input object. +% +% utils.helper.objdisp(obj) +% txt = utils.helper.objdisp(obj) Returns the display text as a cell +% array of strings. +% +% The following call returns an info object for this method. +% +% +% HISTORY: 04-06-08 M Hewitson +% Creation +% +% VERSION: $Id: objdisp.m,v 1.27 2011/04/27 19:35:23 ingo Exp $ +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function varargout = objdisp(varargin) + + % Go through each input + txt = {}; + for jj = 1:nargin + % get this input + objs = varargin{jj}; + + % Print emtpy object + if isempty(objs) + hdr = sprintf('------ %s -------', class(objs)); + ftr(1:length(hdr)) = '-'; + txt = [txt; {hdr}]; + txt = [txt; sprintf('empty-object [%d,%d]',size(objs))]; + txt = [txt; {ftr}]; + end + + % go through each object in this input arg + for kk = 1:numel(objs) + % header + obj = objs(kk); + hdr = sprintf('------ %s/%d -------', class(obj), kk); + ftr(1:length(hdr)) = '-'; + txt = [txt; {hdr}]; + % Go through each field of this object + fnames = fieldnames(obj); + % get longest name for padding + maxl = max(cellfun('length', fnames)); + + for ii = 1:numel(fnames) + f = fnames{ii}; + fval = obj.(f); + padstr = sprintf('%*s', maxl, fnames{ii}); + npadstr = repmat(' ', 1, length(padstr)); + % deal with cell-arrays of strings + switch class(fval) + case 'cell' + cs = ['[' num2str(size(fval,1)),'x',num2str(size(fval,2)) ']']; + cstr = Cell2String(fval); + if isempty(cstr) + txt = [txt; [sprintf('%s: ', padstr), '{}']]; + else + str = [sprintf('%s: ', padstr), cstr(1,:)]; + txt = [txt; str]; + for mm=2:size(cstr,1) + str = [sprintf('%s ', npadstr), cstr(mm,:)]; + txt = [txt; str]; + end + end + txt{end} = [txt{end} ' ' cs]; + case 'double' + MAX_LENGTH = 40; + if isempty(fval) + str = [sprintf('%s: ', padstr) mat2str(fval)]; + elseif isvector(fval) + str = [sprintf('%s: ', padstr) utils.helper.mat2str(fval(1:min(MAX_LENGTH, numel(fval))))]; + else + str = [sprintf('%s: ', padstr) mat2str(fval(1:min(MAX_LENGTH, numel(fval))))]; + end + if MAX_LENGTH<numel(fval) + str = [str(1:end-1) ' ... ]']; + end + txt = [txt; str]; + case 'ssmblock' + txt = [txt; sprintf('%s: [%dx%d %s]', padstr, size(fval), class(fval))]; + margin = sprintf('%s: ', padstr); + whitespace = ''; + for mm = 1:(numel(margin)-4) + whitespace = [whitespace ' ']; + end + for mm = 1:numel(fval) + txt = [txt ; [ sprintf( '%s%s%s%s', whitespace , num2str(mm) ,' : ') strtrim(char(fval(mm))) ] ]; + end + case 'meta.method' + if isempty(objs.testMethods) + txt = [txt; {sprintf('%s: - No Methods -', padstr)}]; + else + txt = [txt; {sprintf('%s: %s', padstr, fval(1).Name)}]; + for mm = 2:numel(fval) + sp(1:maxl) = ' '; + txt = [txt; {sprintf('%s %s', sp, fval(mm).Name)}]; + end + end + case 'handle' + txt = [txt; sprintf('%s: %s [%dx%d %s]', padstr, strtrim(char(fval)), size(fval), class(fval))]; + case 'logical' + txt = [txt; sprintf('%s: ', padstr) mat2str(fval)]; + case 'struct' + fieldsTxt = utils.helper.objdisp(fval); + txt = [txt; sprintf('%s: %s', padstr, fieldsTxt{1})]; + for qq = 2:numel(fieldsTxt) + txt = [txt; sprintf('%s %s', blanks(numel(padstr)), fieldsTxt{qq})]; + end + case 'ltpda_test_runner' + txt = [txt; sprintf('%s: %s', padstr, 'ltpda_test_runner')]; + otherwise + txt = [txt; sprintf('%s: %s', padstr, char(fval))]; + end + end + txt = [txt; {ftr}]; + end % end object loop + end % end input loop + + if nargout == 0 + for ii = 1:length(txt) + disp(txt{ii}); + end + elseif nargout == 1 + varargout{1} = txt; + end +end + +function txt = Cell2String(c) + sc = size(c); + % recursive code to print the content of cell arrays + if iscell(c) % for a cell + txt = '';%; + for ii = 1:sc(1) + if ii == 1 + txti = '{'; + else + txti = ' '; + end + for jj = 1:sc(2) + txti = [txti ' ' Cell2String(c{ii,jj})]; + end + if ii == size(c,1) + txti = [txti, ' }']; + end + txt = strvcat(txt, txti); + end + elseif islogical(c) % for a logical + txt = mat2str(c); + elseif isnumeric(c) || isa(c,'sym') % for a numerical array, only size is displayed + if isequal(sc, [0 0]) + txt = ' [] '; + elseif isa(c, 'double') && numel(c)==1 + txt = ['[' sprintf('%.17g', c) ']']; + elseif isa(c,'double') && (norm(c)==0) % for zero array (test dos not carsh for sym) + txt = ' [] '; + else % for non empty array + if sc(1) > 9 + txt1 = ['[',utils.helper.num2str(sc(1))]; + else + txt1 = [' [',utils.helper.num2str(sc(1))]; + end + if sc(2) > 9 + txt2 = [utils.helper.num2str(sc(2)),']']; + else + txt2 = [utils.helper.num2str(sc(2)),'] ']; + end + txt = [txt1,'x',txt2 ]; + end + % txt = mat2str(c); % old display + elseif ischar(c) + txt = ['''' c '''']; + else + txt = char(c); + end +end