Mercurial > octave-nkf
view scripts/general/private/__isequal__.m @ 19631:db92e7e28e1f
strip trailing whitespace from most source files
* NEWS, doc/interpreter/contributors.in, doc/interpreter/func.txi,
doc/interpreter/genpropdoc.m, doc/interpreter/octave_logo.eps,
doc/interpreter/plot.txi, doc/interpreter/stmt.txi,
examples/data/Makefile.am, libinterp/corefcn/data.cc,
libinterp/corefcn/debug.cc, libinterp/corefcn/error.cc,
libinterp/corefcn/file-io.cc, libinterp/corefcn/gl-render.cc,
libinterp/corefcn/graphics.cc, libinterp/corefcn/graphics.in.h,
libinterp/corefcn/load-path.cc, libinterp/corefcn/pr-output.cc,
libinterp/corefcn/pt-jit.cc, libinterp/corefcn/strfind.cc,
libinterp/corefcn/toplev.cc, libinterp/corefcn/toplev.h,
libinterp/corefcn/urlwrite.cc, libinterp/corefcn/variables.cc,
libinterp/octave-value/ov-classdef.cc,
libinterp/octave-value/ov-classdef.h, libinterp/octave.cc,
libinterp/parse-tree/lex.h, libinterp/parse-tree/oct-parse.in.yy,
libinterp/parse-tree/pt-classdef.h, liboctave/system/file-ops.cc,
liboctave/system/oct-env.cc, m4/acinclude.m4,
scripts/deprecated/finite.m, scripts/deprecated/fmod.m,
scripts/deprecated/fnmatch.m, scripts/deprecated/luinc.m,
scripts/deprecated/octave_tmp_file_name.m, scripts/deprecated/syl.m,
scripts/deprecated/usage.m, scripts/general/inputParser.m,
scripts/general/interp1.m, scripts/general/interp2.m,
scripts/general/interp3.m, scripts/general/isequal.m,
scripts/general/private/__isequal__.m, scripts/geometry/voronoi.m,
scripts/image/image.m, scripts/image/imshow.m,
scripts/image/ind2rgb.m, scripts/linear-algebra/bandwidth.m,
scripts/linear-algebra/isbanded.m, scripts/miscellaneous/bzip2.m,
scripts/miscellaneous/cast.m, scripts/miscellaneous/copyfile.m,
scripts/miscellaneous/delete.m, scripts/miscellaneous/fullfile.m,
scripts/miscellaneous/getappdata.m, scripts/miscellaneous/gunzip.m,
scripts/miscellaneous/isappdata.m, scripts/miscellaneous/ls.m,
scripts/miscellaneous/mex.m, scripts/miscellaneous/movefile.m,
scripts/miscellaneous/orderfields.m, scripts/miscellaneous/recycle.m,
scripts/miscellaneous/rmappdata.m, scripts/miscellaneous/setfield.m,
scripts/miscellaneous/symvar.m, scripts/miscellaneous/tar.m,
scripts/miscellaneous/tmpnam.m, scripts/miscellaneous/unpack.m,
scripts/miscellaneous/ver.m, scripts/miscellaneous/what.m,
scripts/miscellaneous/xor.m, scripts/miscellaneous/zip.m,
scripts/optimization/fminbnd.m, scripts/optimization/sqp.m,
scripts/path/private/getsavepath.m, scripts/path/savepath.m,
scripts/pkg/pkg.m, scripts/pkg/private/installed_packages.m,
scripts/plot/draw/plotyy.m, scripts/plot/draw/polar.m,
scripts/plot/draw/private/__quiver__.m,
scripts/plot/draw/private/__scatter__.m,
scripts/plot/draw/private/__stem__.m, scripts/plot/draw/surface.m,
scripts/plot/draw/surfnorm.m, scripts/plot/util/copyobj.m,
scripts/plot/util/hgload.m, scripts/plot/util/hgsave.m,
scripts/plot/util/isprop.m, scripts/plot/util/linkprop.m,
scripts/plot/util/private/__go_draw_axes__.m, scripts/set/setdiff.m,
scripts/set/union.m, scripts/signal/periodogram.m,
scripts/sparse/eigs.m, scripts/sparse/ilu.m, scripts/sparse/qmr.m,
scripts/sparse/sprand.m, scripts/sparse/sprandn.m,
scripts/specfun/beta.m, scripts/specfun/ellipke.m,
scripts/specfun/isprime.m, scripts/statistics/base/lscov.m,
scripts/testfun/__run_test_suite__.m, scripts/testfun/test.m:
Strip trailing whitespace.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 20 Jan 2015 10:29:54 -0500 |
parents | 1f170b211be3 |
children | 4197fc428c7d |
line wrap: on
line source
## Copyright (C) 2000-2013 Paul Kienzle ## ## 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 ## <http://www.gnu.org/licenses/>. ## Undocumented internal function. ## -*- texinfo -*- ## @deftypefn {Function File} {} __isequal__ (@var{nans_compare_equal}, @var{x1}, @var{x2}, @dots{}) ## Undocumented internal function. ## @end deftypefn ## Return true if @var{x1}, @var{x2}, @dots{} are all equal and ## @var{nans_compare_equal} evaluates to false. ## ## If @var{nans_compare_equal} evaluates to true, then assume NaN == NaN. ## Modified by: William Poetra Yoga Hadisoeseno ## Algorithm: ## ## 1. Determine the class of x ## 2. If x and all other arguments have the same class, then check that the ## number of dimensions and then the size of each dimension match. ## If not all arguments share the same class, then verify that all of the ## arguments belong to a comparable "numeric" class which includes ## numeric, logical, and character arrays. Check that number of dimensions ## and size of each dimension match. ## 3. For each argument after x, compare it for equality with x: ## a. struct compare each member by name, not by order (recursive) ## b. object converted to struct, and then compared as stated above ## c. cell compare each member by order (recursive) ## d. char compare each member with strcmp ## e fcn_handle compare using overloade 'eq' operator ## f. <other> compare each nonzero member, and assume NaN == NaN ## if nans_compare_equal is nonzero. function t = __isequal__ (nans_compare_equal, x, varargin) l_v = nargin - 2; ## Generic tests. ## All arguments must either be of the same class or they must be ## "numeric" values. t = (all (strcmp (class (x), cellfun ("class", varargin, "uniformoutput", false))) || ((isreal (x) || isnumeric (x)) && all (cellfun ("isreal", varargin) | cellfun ("isnumeric", varargin)))); if (t) ## Test that everything has the same number of dimensions. t = all (ndims (x) == cellfun ("ndims", varargin)); endif if (t) ## Test that everything is the same size since the dimensionality matches. nd = ndims (x); k = 1; do t = all (size (x,k) == cellfun ("size", varargin, k)); until (!t || k++ == nd); endif ## From here on, compare objects as if they were structures. if (t && isobject (x)) x = builtin ("struct", x); for i = 1:numel (varargin) varargin{i} = builtin ("struct", varargin{i}); endfor endif if (t) ## Check individual classes. if (isstruct (x)) ## Test the number of fields. fn_x = fieldnames (x); l_fn_x = numfields (x); fn_v = cellfun ("fieldnames", varargin, "uniformoutput", false); t = all (l_fn_x == cellfun ("numel", fn_v)); ## Test that all the names are equal. idx = 0; s_fn_x = sort (fn_x); while (t && idx < l_v) idx++; ## We'll allow the fieldnames to be in a different order. t = all (strcmp (s_fn_x, sort (fn_v{idx}))); endwhile idx = 0; while (t && idx < l_fn_x) ## Test that all field values are equal. idx++; args = cell (1, 2+l_v); args(1:2) = {nans_compare_equal, {x.(fn_x{idx})}}; for argn = 1:l_v args{argn+2} = {varargin{argn}.(fn_x{idx})}; endfor ## Minimize function calls by calling for all the arguments at once. t = __isequal__ (args{:}); endwhile elseif (iscell (x)) ## Check that each element of a cell is equal. l_x = numel (x); idx = 0; while (t && idx < l_x) idx++; args = cell (1, 2+l_v); args(1:2) = {nans_compare_equal, x{idx}}; args(3:end) = [cellindexmat(varargin, idx){:}]; t = __isequal__ (args{:}); endwhile elseif (ischar (x) && all (cellfun ("isclass", varargin, "char"))) ## Sizes are equal already, so we can just make everything into a ## row and test the rows. n_x = numel (x); strings = cell (1, l_v); for i = 1:l_v strings{i} = reshape (varargin{i}, 1, n_x); endfor t = all (strcmp (reshape (x, 1, n_x), strings)); elseif (isa (x, "function_handle")) ## The == operator is overloaded for handles. t = all (cellfun ("eq", {x}, varargin)); else ## Check the numeric types. f_x = find (x); l_f_x = length (f_x); x = x(f_x); for argn = 1:l_v y = varargin{argn}; f_y = find (y); t = (l_f_x == length (f_y)) && all (f_x == f_y); if (!t) break; endif y = y(f_y); m = (x == y); t = all (m); if (!t && nans_compare_equal) t = isnan (x(!m)) && isnan (y(!m)); endif if (!t) break; endif endfor endif endif endfunction