wmemutil.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:3k
源码类别:

波变换

开发平台:

Matlab

  1. function [out1,out2] = wmemutil(option,in2,in3,in4)
  2. %WMEMUTIL Memory utilities.
  3. %
  4. %   M = WMEMUTIL('add',M,V) adds V to the memory block M
  5. %   M = WMEMUTIL('add',M,V,IN4) adds V to the memory block M
  6. %
  7. %   [V,M] = WMEMUTIL('get',M)
  8. %   [V,M] = WMEMUTIL('get',M,NUM)
  9. %
  10. %   M = WMEMUTIL('set',M,NUM,V)
  11. %
  12. %   M = WMEMUTIL('def',N) defines a memory block
  13. %   with N empty variables
  14. %
  15. %   I = WMEMUTIL('ind',M,V) get index in M of a block with value V
  16. %
  17. %   I = WMEMUTIL('nbb',M) get nb var block in memory block M.
  18. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 01-May-96.
  19. %   Last Revision: 22-May-2003.
  20. %   Copyright 1995-2004 The MathWorks, Inc.
  21. % $Revision: 1.11.4.2 $
  22. switch option
  23.     case 'add'    % add a memory bloc.
  24.         if ischar(in3), in3 = abs(in3); type = 1 ; else , type  = 0; end
  25.         if nargin==4
  26.             out1 = [size(in3) type in3(:)' in2];
  27.         else
  28.             out1 = [in2 size(in3) type in3(:)'];
  29.         end
  30.     case 'get'    % get a memory bloc.
  31.         out1 = [];      out2 = [];
  32.         if isempty(in2) , return; end
  33.         if nargin==2 , in3 = 1; end
  34.         count = 0;
  35.         ltot  = length(in2);
  36.         ind   = 1;
  37.         while (count<in3-1) && (ind<ltot)
  38.             ind   = ind+3+prod(in2(ind:ind+1));
  39.             count = count+1;
  40.         end
  41.         if ind<ltot
  42.             ibeg    = ind+3+prod(in2(ind:ind+1));
  43.             if min(in2(ind:ind+1))>0
  44.                out1    = zeros(in2(ind),in2(ind+1));
  45.                out1(:) = in2(ind+3:ibeg-1);
  46.             end
  47.             out2 = in2(ibeg:ltot);
  48.             if in2(ind+2)==1 , out1 = setstr(out1); end
  49.         end
  50.     case 'set'    % set a memory bloc.
  51.         count = 0;
  52.         ltot  = length(in2);
  53.         ind   = 1;
  54.         while (count<in3-1) && (ind<ltot)
  55.             ind   = ind+3+prod(in2(ind:ind+1));
  56.             count = count+1;
  57.         end
  58.         front = in2(1:ind-1);
  59.         if ind<ltot
  60.             back = in2(3+prod(in2(ind:ind+1))+ind:ltot);
  61.         else
  62.             back = [];
  63.         end
  64.         if ischar(in4), in4 = abs(in4); type = 1 ; else , type  = 0; end
  65.         out1 = [front size(in4) type in4(:)' back];
  66.     case 'def'    % define a memory bloc.
  67.         out1 = zeros(1,3*in2);
  68.  
  69.     case 'ind'    % get index.    
  70.         count = 0;
  71.         ok    = 0;
  72.         ltot  = length(in2);
  73.         ind   = 1;
  74.         while (ok==0) && (ind<ltot)
  75.             count = count+1;
  76.             s     = in2(ind:ind+1);
  77.             type  = in2(ind+2); 
  78.             l     = 3+prod(s);
  79.             if s==size(in3)
  80.                 if min(s) >0
  81.                    bloc    = zeros(s(1),s(2));
  82.                    bloc(:) = in2(ind+3:ind+l-1);
  83.                 else
  84.                    bloc = [];
  85.                 end
  86.                 if ischar(in3) , in3 = abs(in3); end
  87.                 if in3==bloc , ok = 1; end
  88.             end
  89.             ind = ind+l;
  90.         end
  91.         if ok==1 , out1 = count; else , out1 = 0; end
  92.     case 'nbb'    % get nb blocs.
  93.         out1 = 0;
  94.         ltot = length(in2);
  95.         ind  = 1;
  96.         while (ind<ltot)
  97.             out1 = out1+1;
  98.             s    = in2(ind:ind+1);
  99.             l    = 3+prod(s);
  100.             ind  = ind+l;
  101.         end
  102.     otherwise
  103.         errargt(mfilename,'Unknown Option','msg');
  104.         error('*');
  105. end