MatrixBerryCore
parsestackelem.m
Go to the documentation of this file.
1 function [methodName,className]=parsestackelem(SStackElem)
2 
3 if nargin==0
4  mxberry.core.throwerror('wrongInput',...
5  'SStackElem must be given');
6 end
7 mxberry.core.checkvar(SStackElem,'isstruct(x)&&numel(x)==1',...
8  'SStackElem');
9 mxberry.core.checkvar(SStackElem,'all(isfield(x,{''file'',''name''}))',...
10  'SStackElem');
11 [pathStr,fileName]=fileparts(SStackElem.file);
12 if isempty(strfind(pathStr,[filesep '+']))&&isempty(strfind(pathStr,[filesep '@']))
13  pathStr='';
14  isClass=false;
15  isPath=false;
16 else
17  pathStr=strrep(pathStr,[filesep '+'],'.');
18  indClass=strfind(pathStr,[filesep '@']);
19  isClass=~isempty(indClass);
20  if isClass
21  pathStr(indClass)='.';
22  pathStr(indClass+1)=[];
23  end
24  curInd=find(pathStr==filesep,1,'last');
25  if ~isempty(curInd)
26  pathStr=pathStr(curInd+1:end);
27  end
28  curInd=find(pathStr=='.',1,'first');
29  if isempty(curInd)
30  isPath=false;
31  else
32  pathStr=pathStr(curInd+1:end);
33  isPath=~isempty(pathStr);
34  end
35 end
36 methodName=SStackElem.name;
37 curInd=find(methodName=='.',1,'last');
38 if ~isempty(curInd)
39  methodName=methodName(curInd+1:end);
40  if ~isClass
41  if isPath
42  pathStr=[pathStr '.' fileName];
43  else
44  pathStr=fileName;
45  isPath=true;
46  end
47  isClass=true;
48  end
49 end
50 className='';
51 if isPath&&isClass
52  className=pathStr;
53 end
54 curInd=find(methodName=='/'|methodName=='\',1,'first');
55 if isempty(curInd)
56  mainMethodName=methodName;
57 else
58  mainMethodName=methodName(1:curInd-1);
59 end
60 curInd=find(className=='.',1,'last');
61 if isempty(curInd)
62  mainClassName=className;
63 else
64  mainClassName=className(curInd+1:end);
65 end
66 if ~(isequal(fileName,mainMethodName)||(isClass&&isequal(fileName,mainClassName)))
67  methodName=[fileName '/' methodName];
68 end
69 if isPath&&~isClass
70  methodName=[pathStr '.' methodName];
71 end
function parsestackelem(in SStackElem)
PARSESTACKELEM parses structure for given element of stack and returns the corresponding function/scr...
function filesep()