⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makemultioutput.m

📁 student teacher and proferssor llove this project,this a very important exmple
💻 M
字号:
function tempstr=makemultioutput(i,j,funstr,funstrnumbers,funstrnumbers_b,funstrnumbers_e,funstrwords,funstrwords_b,funstrwords_e,funwords,inoutother,keywords,localvartype,needed_interfaces,filename_all,make_words,cw,multinum,howmany,subscripts,centercomma,parens,howmany2,subscripts2,centercomma2,parens2);tempstr=cell(2,1);r=char(10);typestr{1}=makeMATLABcallstring(howmany,subscripts,centercomma,parens,i,j);typestr{2}=makeMATLABcallstring(howmany2,subscripts2,centercomma2,parens2,i,j);howmany3=zeros(1,howmany2);for k=1:howmany2 if k==1,leftside=parens2(1);rightside=centercomma2(1); elseif k==howmany2,leftside=centercomma2(k-1);rightside=parens2(2); else leftside=centercomma2(k-1);rightside=centercomma2(k); end temp=find((funstrwords_b{i}<rightside)&(funstrwords_b{i}>leftside)); howmany3(k)=hassubscript(i,temp(1));endtempstr{1}=['       interface mlcallm',num2str(multinum),r...    '        module procedure callbackm',num2str(multinum),r,...    '       end interface mlcallm',num2str(multinum),r];tempstr{2}=['       subroutine callbackm',num2str(multinum),'('];for k=1:howmany if any(strcmp(typestr{1}(k),{'i';'u'}))  tempstr{2}=[tempstr{2},'in_i_',num2str(k),',']; else  tempstr{2}=[tempstr{2},'in_',num2str(k),',']; endendfor k=1:howmany2 tempstr{2}=[tempstr{2},'out_',num2str(k),','];  if howmany3(k)==2  for ii=1:howmany3(k)   tempstr{2}=[tempstr{2},'out_',num2str(k),'_',num2str(ii),','];   end endendtempstr{2}=[tempstr{2},'funstr)',r];i=length(typestr{1});for k=1:i switch typestr{1}(k)  case 'r'   tempstr{2}=[tempstr{2},'       real, dimension(:,:) :: in_',num2str(k),r];   tempstr{2}=[tempstr{2},'       integer, pointer :: in_',num2str(k),'_ptr',r];  case 'c'   tempstr{2}=[tempstr{2},'       complex, dimension(:,:) :: in_',num2str(k),r];   tempstr{2}=[tempstr{2},'       integer, pointer :: in_',num2str(k),'_r_ptr',r];   tempstr{2}=[tempstr{2},'       integer, pointer :: in_',num2str(k),'_i_ptr',r];  case 'i'   tempstr{2}=[tempstr{2},'       integer, dimension(:,:) :: in_i_',num2str(k),r];   tempstr{2}=[tempstr{2},'       integer, pointer :: in_',num2str(k),'_ptr',r];   tempstr{2}=[tempstr{2},'       real, allocatable, dimension(:,:) :: in_',num2str(k),r];  case 's'   tempstr{2}=[tempstr{2},'       real :: in_',num2str(k),r];   tempstr{2}=[tempstr{2},'       integer, pointer :: in_',num2str(k),'_ptr',r];  case 't'   tempstr{2}=[tempstr{2},'       complex :: in_',num2str(k),r];   tempstr{2}=[tempstr{2},'       integer, pointer :: in_',num2str(k),'_r_ptr',r];   tempstr{2}=[tempstr{2},'       integer, pointer :: in_',num2str(k),'_i_ptr',r];  case 'u'   tempstr{2}=[tempstr{2},'       integer :: in_i_',num2str(k),r];   tempstr{2}=[tempstr{2},'       integer, pointer :: in_',num2str(k),'_ptr',r];   tempstr{2}=[tempstr{2},'       real :: in_',num2str(k),r]; endendi=length(typestr{2});for k=1:i switch typestr{2}(k)  case 'r'   tempstr{2}=[tempstr{2},'       real, pointer, dimension(:,:) :: out_',num2str(k),r];   tempstr{2}=[tempstr{2},'       integer, pointer :: out_',num2str(k),'_ptr',r];  case 'c'   tempstr{2}=[tempstr{2},'       complex, pointer, dimension(:,:) :: out_',num2str(k),r];   tempstr{2}=[tempstr{2},'       integer, pointer :: out_',num2str(k),'_r_ptr',r];   tempstr{2}=[tempstr{2},'       integer, pointer :: out_',num2str(k),'_i_ptr',r];  case 'i'   tempstr{2}=[tempstr{2},'       integer, pointer, dimension(:,:) :: out_',num2str(k),r];   tempstr{2}=[tempstr{2},'       integer, pointer :: out_',num2str(k),'_ptr',r];  case 's'   tempstr{2}=[tempstr{2},'       real :: out_',num2str(k),r];   tempstr{2}=[tempstr{2},'       integer, pointer :: out_',num2str(k),'_ptr',r];  case 't'   tempstr{2}=[tempstr{2},'       complex :: out_',num2str(k),r];   tempstr{2}=[tempstr{2},'       integer, pointer :: out_',num2str(k),'_r_ptr',r];   tempstr{2}=[tempstr{2},'       integer, pointer :: out_',num2str(k),'_i_ptr',r];  case 'u'   tempstr{2}=[tempstr{2},'       integer :: out_',num2str(k),r];   tempstr{2}=[tempstr{2},'       integer, pointer :: out_',num2str(k),'_ptr',r]; end if howmany3(k)==2  for ii=1:howmany3(k)   tempstr{2}=[tempstr{2},'       integer, dimension(:) :: out_',num2str(k),'_',num2str(ii),r];  end end  endtempstr{2}=[tempstr{2},'       character (len=*) :: funstr',r];tempstr{2}=[tempstr{2},'       integer lhs(50), rhs(50)',r];tempstr{2}=[tempstr{2},'       integer '];for k=1:howmany if k~=howmany  tempstr{2}=[tempstr{2},'in_',num2str(k),'_m, in_',num2str(k),'_n, ']; else  tempstr{2}=[tempstr{2},'in_',num2str(k),'_m, in_',num2str(k),'_n',r]; endendtempstr{2}=[tempstr{2},'       integer '];for k=1:howmany2 if k~=howmany2  tempstr{2}=[tempstr{2},'out_',num2str(k),'_m, out_',num2str(k),'_n, ']; else  tempstr{2}=[tempstr{2},'out_',num2str(k),'_m, out_',num2str(k),'_n',r]; endendfor k=1:howmany if strcmp(typestr{1}(k),'i')  tempstr{2}=[tempstr{2},'        allocate(in_',num2str(k),'(size(in_i_',num2str(k),',dim=1),size(in_i_',num2str(k),',dim=2)))',r];  end if ((strcmp(typestr{1}(k),'i'))|(strcmp(typestr{1}(k),'u')))  tempstr{2}=[tempstr{2},'        in_',num2str(k),'=in_i_',num2str(k),r];  end if ((strcmp(typestr{1}(k),'r'))|(strcmp(typestr{1}(k),'c'))|(strcmp(typestr{1}(k),'i')))    tempstr{2}=[tempstr{2},'        in_',num2str(k),'_m=size(in_',num2str(k),',dim=1); in_',num2str(k),'_n=size(in_',num2str(k),',dim=2)',r]; else  tempstr{2}=[tempstr{2},'        in_',num2str(k),'_m=1; in_',num2str(k),'_n=1',r]; endend% for k=1:howmany2%  if howmany3(k)==2%   tempstr{2}=[tempstr{2},'        out_',num2str(k),'_m=size(out_',num2str(k),'_1);out_',num2str(k),'_n=size(out_',num2str(k),'_2)',r];%  else%   tempstr{2}=[tempstr{2},'        out_',num2str(k),'_m=size(out_',num2str(k),',dim=1);out_',num2str(k),'_n=size(out_',num2str(k),',dim=2)',r];%  end% end%do the out cars allocatingfor k=1:howmany if ((strcmp(typestr{1}(k),'r'))|(strcmp(typestr{1}(k),'s'))|(strcmp(typestr{1}(k),'i'))|(strcmp(typestr{1}(k),'u')))  tempstr{2}=[tempstr{2},'        rhs(',num2str(k),')=mxCreateFull(in_',num2str(k),'_m,in_',num2str(k),'_n,0)',r];  tempstr{2}=[tempstr{2},'        in_',num2str(k),'_ptr=>mxGetPr(rhs(',num2str(k),'))',r];  tempstr{2}=[tempstr{2},'        call fill(in_',num2str(k),'_ptr,in_',num2str(k),'_m,in_',num2str(k),'_n,in_',num2str(k),')',r];  tempstr{2}=[tempstr{2},'        call mxSetM(rhs(',num2str(k),'),in_',num2str(k),'_m);call mxSetN(rhs(',num2str(k),'),in_',num2str(k),'_n)',r]; else  tempstr{2}=[tempstr{2},'        rhs(',num2str(k),')=mxCreateFull(in_',num2str(k),'_m,in_',num2str(k),'_n,1)',r];  tempstr{2}=[tempstr{2},'        in_',num2str(k),'_r_ptr=>mxGetPr(rhs(',num2str(k),'))',r];  tempstr{2}=[tempstr{2},'        in_',num2str(k),'_i_ptr=>mxGetPi(rhs(',num2str(k),'))',r];  tempstr{2}=[tempstr{2},'        call fill(in_',num2str(k),'_r_ptr,in_',num2str(k),'_m,in_',num2str(k),'_n,real(in_',num2str(k),'))',r];  tempstr{2}=[tempstr{2},'        call fill(in_',num2str(k),'_i_ptr,in_',num2str(k),'_m,in_',num2str(k),'_n,aimag(in_',num2str(k),'))',r];  tempstr{2}=[tempstr{2},'        call mxSetM(rhs(',num2str(k),'),in_',num2str(k),'_m);call mxSetN(rhs(',num2str(k),'),in_',num2str(k),'_n)',r]; endendtempstr{2}=[tempstr{2},...	    '        call mexCallMATLAB(',num2str(howmany2),',lhs(1:',num2str(howmany2),'),',num2str(howmany),',rhs(1:',num2str(howmany),'),funstr)',r];for k=1:howmany2 if ((strcmp(typestr{2}(k),'r'))|(strcmp(typestr{2}(k),'c'))|(strcmp(typestr{2}(k),'i')))  tempstr{2}=[tempstr{2},'        out_',num2str(k),'_m=mxGetM(lhs(',num2str(k),'));out_',num2str(k),'_n=mxGetN(lhs(',num2str(k),'))',r];  tempstr{2}=[tempstr{2},'        allocate(out_',num2str(k),'(out_',num2str(k),'_m,out_',num2str(k),'_n))',r]; end switch typestr{2}(k)  case 'r'   tempstr{2}=[tempstr{2},'        out_',num2str(k),'_ptr=>mxGetPr(lhs(',num2str(k),'))',r];   tempstr{2}=[tempstr{2},'        call fill(out_',num2str(k),',out_',num2str(k),'_m,out_',num2str(k),'_n,out_',num2str(k),'_ptr)',r];  case 'c'   tempstr{2}=[tempstr{2},'        out_',num2str(k),'_r_ptr=>mxGetPr(lhs(',num2str(k),'))',r];   tempstr{2}=[tempstr{2},'        out_',num2str(k),'_i_ptr=>mxGetPi(lhs(',num2str(k),'))',r];   tempstr{2}=[tempstr{2},'        call fillc(out_',num2str(k),',out_',num2str(k),'_m,out_',num2str(k),'_n,out_',num2str(k),'_r_ptr,out_',num2str(k),'_i_ptr)',r];  case 'i'   tempstr{2}=[tempstr{2},'        out_',num2str(k),'_ptr=>mxGetPr(lhs(',num2str(k),'))',r];   tempstr{2}=[tempstr{2},'        call filli(out_',num2str(k),',out_',num2str(k),'_m,out_',num2str(k),'_n,out_',num2str(k),'_ptr)',r];  case 's'   tempstr{2}=[tempstr{2},'        out_',num2str(k),'_ptr=>mxGetPr(lhs(',num2str(k),'))',r];   tempstr{2}=[tempstr{2},'        call fill(out_',num2str(k),',1,1,out_',num2str(k),'_ptr)',r];  case 't'   tempstr{2}=[tempstr{2},'        out_',num2str(k),'_r_ptr=>mxGetPr(lhs(',num2str(k),'))',r];   tempstr{2}=[tempstr{2},'        out_',num2str(k),'_i_ptr=>mxGetPi(lhs(',num2str(k),'))',r];   tempstr{2}=[tempstr{2},'        call fillc(out_',num2str(k),',1,1,out_',num2str(k),'_r_ptr,out_',num2str(k),'_i_ptr)',r];  case 'i'   tempstr{2}=[tempstr{2},'        out_',num2str(k),'_ptr=>mxGetPr(lhs(',num2str(k),'))',r];   tempstr{2}=[tempstr{2},'        call filli(out_',num2str(k),',1,1,out_',num2str(k),'_ptr)',r]; endendtempstr{2}=[tempstr{2},...	    '       end subroutine callbackm',num2str(multinum),r];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -