Mercurial > hg > octave-nkf
diff scripts/general/methods.m @ 15785:42cff4396de4
Add methods.m which extends methods() to work on Java objects.
Deprecate javamethods.m. Rename C++ methods to __methods__.
* scripts/deprecated/javamethods.m: Moved from scripts/java.
Added deprecated warning.
* scripts/java/javamethods.m: Moved to scripts/deprecated.
* scripts/general/methods.m: New m-file which accepts Java and
Octave class objects and classnames as inputs.
* libinterp/octave-value/ov-class.cc(Fmethods): Renamed methods
to __methods__ to avoid clash with methods.m
* scripts/deprecated/module.mk: Added javamethods.m to deprecated build.
* scripts/general/module.mk: Added methods.m to build.
* scripts/java/module.mk: Removed javamethods.m from build.
author | Rik <rik@octave.org> |
---|---|
date | Thu, 13 Dec 2012 22:41:48 -0800 |
parents | |
children | 921912c92102 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/scripts/general/methods.m @@ -0,0 +1,76 @@ +## Copyright (C) 2012 Rik Wehbring +## +## 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/>. + +## -*- texinfo -*- +## @deftypefn {Built-in Function} {} methods (@var{obj}) +## @deftypefnx {Built-in Function} {} methods ("@var{classname}") +## @deftypefnx {Built-in Function} {@var{mtds} =} methods (@dots{}) +## +## Return a cell array containing the names of the methods for the +## object @var{obj} or the named class @var{classname}. +## @var{obj} may be an Octave class object or a Java object. +## +## @seealso{fieldnames} +## @end deftypefn + +function mtds = methods (obj) + + if (nargin != 1) + print_usage (); + endif + + if (isobject (obj)) + ## Call internal C++ function for Octave objects + mtds_list = __methods__ (obj); + elseif (ischar (obj)) + ## Could be a classname for an Octave class or Java class. + ## Try Octave class first. + mtds_list = __methods__ (obj); + if (isempty (mtds_list)) + mtds_str = java_invoke ("org.octave.ClassHelper", "getMethods", obj); + mtds_list = strsplit (mtds_str, ';'); + endif + elseif (isjava (obj)) + mtds_str = java_invoke ("org.octave.ClassHelper", "getMethods", obj); + mtds_list = strsplit (mtds_str, ';'); + else + error ("methods: Invalid input argument"); + endif + + if (nargout == 0) + classname = ifelse (ischar (obj), obj, class (obj)); + printf ("Methods for class %s:\n", classname); + disp (list_in_columns (mtds_list)); + else + mtds = mtds_list; + endif + +endfunction + + +## test Octave classname +%!test +%! mtds = methods ("ftp"); +%! assert (mtds{1}, "ascii"); + +## test Java classname +%!testif HAVE_JAVA +%! mtds = methods ("java.lang.Double"); +%! search = strfind (mtds, "java.lang.Double valueOf"); +%! assert (! isempty ([search{:}])); +