-
Notifications
You must be signed in to change notification settings - Fork 9
/
parse_opt.m
52 lines (48 loc) · 1.98 KB
/
parse_opt.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function [varargout] = parse_opt(args, varargin)
% function [varargout] = parse_opt(args, varargin)
%
% Process name-value argument pairs which can be passed in arbitrary
% order. This function is very much like Mark A. Paskin's
% 'process_options' function (from which it borrows heavily), but aims
% to be a bit faster and therefore is simpler and does less error checking.
%
% Example: Suppose we pass varargin = {'a', 23, 'c', 'hi'} into parse_opt:
%
% [a,b,c] = parse_opt(varargin, 'a', 1, 'b', 2, 'c', 'test');
%
% This would result in a=23, b=2, and c='hi' as we gave values for variables
% 'a' and 'c', but not 'b' which got the default value of 2.
%
% 2010-01-14 Graham Grindlay (grindlay@ee.columbia.edu)
% Copyright (C) 2008-2028 Graham Grindlay (grindlay@ee.columbia.edu)
% Based on process_options.m Copyright (C) 2002 Mark A. Paskin
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program. If not, see <http://www.gnu.org/licenses/>.
ni = length(varargin);
% these are just about the only things that we'll check for
if nargout*2 ~= ni
error('parse_opt requires a name-value input pair for each output');
end
if mod(ni,2) ~= 0
error('parse_opt requires name-value input pairs');
end
no = ni/2;
varargout = cell(1,no);
for i = 1:2:ni
ndx = find(strcmpi(varargin{i}, args));
if isempty(ndx)
varargout{(i+1)/2} = varargin{i+1};
else
varargout{(i+1)/2} = args{ndx+1};
end
end