changeset 26:eff1b969ad75

Use varargin
author pkienzle
date Sat, 02 Nov 2002 10:36:38 +0000
parents 26035de12d53
children e6818dcad4c6
files colfilt.m impad.m medfilt2.m ordfilt2.m
diffstat 4 files changed, 17 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/colfilt.m
+++ b/colfilt.m
@@ -24,7 +24,7 @@
 ## The present version does not handle 'distinct'
 
 ## This software is granted to the public domain
-function B = colfilt(A,filtsize,blksize,blktype,f,...)
+function B = colfilt(A,filtsize,blksize,blktype,f,varargin)
 
    [m,n]=size(A);
    r = filtsize(1);
@@ -56,7 +56,7 @@
      for i = 0:m/mblock-1
        for j = 0:n/nblock-1
          idxA(:) = padA(idx + (i*mblock + padm*j*nblock));
-         tmp(:) = feval(f,idxA,all_va_args);
+         tmp(:) = feval(f,idxA,varargin{:});
          B(1+i*mblock:(i+1)*mblock, 1+j*nblock:(j+1)*nblock) = tmp;
        end
      end
@@ -71,7 +71,7 @@
      idxA = zeros(r*c,m*n);
      idxA(:) = padA(:)(idx);
      B = zeros(size(A));
-     B(:) = feval(f,idxA,all_va_args);
+     B(:) = feval(f,idxA,varargin{:});
    case 'old-distinct' # processes the whole matrix at a time
      if (r*floor(m/r) != m || c*floor(n/c) != n)
         error("colfilt expected blocks to exactly fill A");
@@ -82,7 +82,7 @@
      idxA = zeros(r*c,m*n/r/c);
      idxA(:) = A(:)(idx);
      B = zeros(prod(size(A)),1);
-     B(idx) = feval(f,idxA,all_va_args);
+     B(idx) = feval(f,idxA,varargin{:});
      B = reshape(B,size(A));
    endswitch
 endfunction
--- a/impad.m
+++ b/impad.m
@@ -56,27 +56,21 @@
 ## A nice test matrix for padding:
 ## A = 10*[1:5]' * ones(1,5) + ones(5,1)*[1:5]
 
-function retval = impad(A, xpad, ypad, ...)
+function retval = impad(A, xpad, ypad, padding, const)
 
 empty_list_elements_ok_save = empty_list_elements_ok;
 unwind_protect
 
-padding = "zeros";
-const = 1;
-va_start();
-if(nargin > 3)
-  padding = va_arg();
-  if(nargin > 4)
-    const = va_arg();
-  endif
-endif
+if nargin < 4, padding = "zeros"; endif
+if nargin < 5, const = 1; endif
+if isscalar(xpad), xpad(2) = xpad(1); endif
+if isscalar(ypad), ypad(2) = ypad(1); endif
   
 origx = size(A,2);
 origy = size(A,1);
 retx = origx + xpad(1) + xpad(2);
 rety = origy + ypad(1) + ypad(2);
 
-emptywarn = empty_list_elements_ok;
 empty_list_elements_ok = 1;
 
 if(strcmp(padding, "zeros"))
--- a/medfilt2.m
+++ b/medfilt2.m
@@ -34,15 +34,13 @@
 ## Created: 5.5.2000
 ## Keywords: image processing median filtering
 
-function retval = medfilt2(A, ...)
+function retval = medfilt2(A, varargin)
 
 padding = "zeros";
 domain = logical(ones(3,3));
 
-nargin = nargin - 1;
-va_start();
-while(nargin--)
-  a = va_arg();
+for i=1:length(varargin)
+  a = varargin{i};
   if(isstr(a))
     padding = a;
   elseif(is_vector(a) && size(a) == [1, 2])
@@ -50,7 +48,7 @@
   elseif(is_matrix(a))
     domain = logical(a);
   endif
-endwhile
+endfor
 
 n = sum(sum(domain));
 if((n - 2*floor(n/2)) == 0) % n even - more work
@@ -64,6 +62,3 @@
 endif
 
 endfunction
-  
-  
-  
--- a/ordfilt2.m
+++ b/ordfilt2.m
@@ -39,20 +39,18 @@
 ## Created: 5.5.2000
 ## Keywords: image processing filtering
 
-function retval = ordfilt2(A, nth, domain, ...)
+function retval = ordfilt2(A, nth, domain, varargin)
 
 S = zeros(size(domain));
 padding = "zeros";
-nargin = nargin - 3;
-va_start();
-while(nargin--)
-  a = va_arg();
+for i=1:length(varargin)
+  a = varargin{:};
   if(isstr(a))
     padding = a;
   elseif(is_matrix(a) && size(a) == size(domain))
     S = a;
   endif
-endwhile
+endfor
 
 if(!islogical(domain))
   %  warning("domain should be a boolean matrix, converting");