Mercurial > hg > camir-aes2014
diff toolboxes/distance_learning/mlr/util/parsepvpairs.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolboxes/distance_learning/mlr/util/parsepvpairs.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,94 @@ +function varargout = parsepvpairs(names, defaults, varargin) +%PARSEPVPAIRS Validate parameter name/value pairs and throw errors if necessary. +% Given the cell array of valid parameter names, a corresponding cell array of +% parameter default values, and a variable length list of parameter name/value +% pairs, validate the specified name/value pairs and assign values to output +% parameters. +% +% [P1, P2, ...] = parsepvpairs(Names, Defaults, 'Name1', Value1, 'Name2', Value2, ...) +% +% Inputs: +% Names - Cell array of valid parameter names. +% +% Defaults - Cell array of default values for the parameters named in Names. +% +% Name# - Character strings of parameter names to be validated and +% assigned the corresponding value that immediately follows each +% in the input argument list. Parameter name validation is +% case-insensitive and partial string matches are allowed provided +% no ambiguities exist. +% +% Value# - The values assigned to the corresponding parameter that +% immediately precede each in the input argument list. +% +% Outputs: +% P# - Parameters assigned the parameter values Value1, Value2, ... +% in the same order as the names listed in Names. Parameters +% corresponding to entries in Names that are not specified in the +% name/value pairs are set to the corresponding value listed in +% Defaults. + +% Copyright 1995-2007 The MathWorks, Inc. +% $Revision: 1.1.6.2 $ $Date: 2008/12/21 01:51:18 $ + +% +% Short-circuit the input argument checking for performance purposes. Under the +% following specific circumstances, users may by-pass P-V pair validation when: +% +% (1) Values are assigned to all recognized parameters, +% (2) Parameters are specified in exactly the same order as in the input NAMES, +% (3) All parameters are completely specified (i.e., exact matches and no partial +% names allowed). +% + +if isequal(varargin(1:2:end-1), names) + varargout = varargin(2:2:end); + return +end + +% Initialize some variables. +nInputs = length(varargin); % # of input arguments +varargout = defaults; + +% Ensure parameter/value pairs. +if mod(nInputs, 2) ~= 0 + error('finance:parsepvpairs:incorrectNumberOfInputs', ... + 'Input parameters must be in name/value pair format.'); + +else + names = lower(names); + + % Process p/v pairs. + for j = 1:2:nInputs + pName = varargin{j}; + + if ~ischar(pName) + error('finance:parsepvpairs:nonTextString', ... + 'Parameter names must be character strings.'); + end + + i = strmatch(lower(pName), names); + + if isempty(i) + error('finance:parsepvpairs:invalidParameter', ... + 'Invalid parameter name: %s.', pName); + + elseif length(i) > 1 + % If ambiguities exist, check for exact match to narrow search. + i = strmatch(lower(pName), names, 'exact'); + if length(i) == 1 + varargout{i} = varargin{j+1}; + + else + error('finance:parsepvpairs:ambiguousParameter', ... + 'Ambiguous parameter name: %s.', pName); + end + + else + varargout{i} = varargin{j+1}; + end + end +end + + +% [EOF]