Mercurial > octave
view scripts/set/private/validsetargs.m @ 27229:255f2681d224
intersect.m: Accept a "legacy" flag for Matlab compatibility.
* NEWS: Announce change.
* intersect.m: Add new calling form and explanation of "legacy" option to
docstring. Allow up to 4 inputs in input validation. Check for "legacy"
in input options and set variable optlegacy. Only use two-input form
of sort or sortrows when number of outputs of intersect function is greater
than 1. After calculation, change orientation of outputs as required based
on optlegacy. Add BIST tests to test output orientation and values.
* validsetargs.m: Modify to accept a variable number of option arguments as
last input (varargin). Use switch statement to validate possible options
including accepting "legacy".
author | Rik <rik@octave.org> |
---|---|
date | Wed, 10 Jul 2019 17:32:52 -0700 |
parents | 00f796120a6d |
children | 9f44123dc25b |
line wrap: on
line source
## Copyright (C) 2000-2019 Paul Kienzle ## Copyright (C) 2009-2010 Jaroslav Hajek ## ## This file is part of Octave. ## ## Octave 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. ## ## Octave 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 Octave; see the file COPYING. If not, see ## <https://www.gnu.org/licenses/>. ## Validate arguments for binary set operation. function [x, y] = validsetargs (caller, x, y, varargin) isallowedarraytype = @(x) isnumeric (x) || ischar (x) || islogical (x); if (nargin == 3) icx = iscellstr (x); icy = iscellstr (y); if (icx || icy) if (icx && ischar (y)) y = cellstr (y); elseif (icy && ischar (x)) x = cellstr (x); elseif (icy && isempty (x)) x = {}; elseif (icx && isempty (y)) y = {}; elseif (! (icx && icy)) error ("%s: cell array of strings cannot be combined with a nonstring value", caller); endif elseif (! (isallowedarraytype (x) && isallowedarraytype (y))) error ("%s: A and B must be arrays or cell arrays of strings", caller); endif elseif (nargin == 4) for arg = varargin switch (arg{1}) case "legacy" ## Accepted option, do nothing. case "rows" if (iscell (x) || iscell (y)) error ('%s: cells not supported with "rows"', caller); elseif (! (isallowedarraytype (x) && isallowedarraytype (y))) error ("%s: A and B must be arrays or cell arrays of strings", caller); else if (ndims (x) > 2 || ndims (y) > 2) error ('%s: A and B must be 2-dimensional matrices for "rows"', caller); elseif (columns (x) != columns (y) && ! (isempty (x) || isempty (y))) error ("%s: number of columns in A and B must match", caller); endif endif otherwise error ("%s: invalid option: %s", caller, byrows_arg); endswitch endfor endif endfunction ## %!tests for function are in union.m