changeset 28903:614a23ddba7a

__default__input__.m: Overhaul function. * __default__input__.m: Improve documentation. Don't use unnecessary '[]' around single output argument of function. Change algorithm to operate first over the common number of inputs and default values. Second, copy over any remaining inputs or default values directly to output.
author Rik <rik@octave.org>
date Tue, 13 Oct 2020 12:10:40 -0700
parents 69bd3e52d0b8
children 930cb0ae24fd
files scripts/sparse/private/__default__input__.m
diffstat 1 files changed, 17 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/sparse/private/__default__input__.m	Tue Oct 13 11:48:30 2020 -0700
+++ b/scripts/sparse/private/__default__input__.m	Tue Oct 13 12:10:40 2020 -0700
@@ -34,31 +34,39 @@
 ## @item @var{def_val} is a cell array that contains the values to use
 ## as default.
 ##
-## @item @var{varargin} are the input arguments
+## @item @var{varargin} are the input arguments.
 ## @end itemize
 ##
 ## The output arguments are:
 ##
 ## @itemize @minus
-## @item @var{varargout} all input arguments completed with default
-## values for empty or omitted parameters.
+## @item @var{varargout} are the input arguments where any empty or omitted
+## parameters have been replaced with default values.
 ##
 ## @end itemize
 ##
 ## @end deftypefn
 
-
-function [varargout] = __default__input__ (def_val, varargin)
+function varargout = __default__input__ (def_val, varargin)
 
-  m = length (def_val);
-  n = length (varargin);
+  m = numel (def_val);
+  n = numel (varargin);
+  count = min (m, n);
 
-  for i = 1:m
-    if (n < i || isempty (varargin{i}))
+  ## Check for missing values in input and replace with default value.
+  for i = 1:count
+    if (isempty (varargin{i}))
       varargout{i} = def_val{i};
     else
       varargout{i} = varargin{i};
     endif
   endfor
 
+  ## Copy any remaining items to output
+  if (n < m)
+    varargout(n+1:m) = def_val(n+1:m);
+  elseif (m < n)
+    varargout(m+1:n) = varargin(m+1:n);
+  endif
+
 endfunction