Mercurial > hg > octave-nkf
diff libinterp/octave-value/ov-classdef.cc @ 16690:1c45e22fc444 classdef
Implement meta.package.getAllPackages() method.
* libinterp/interpfcn/load-path.h (load_path::get_all_package_names):
New static method.
(load_path::do_get_all_package_names): New method.
* libinterp/interpfcn/load-path.cc
(load_path::do_get_all_package_names): New method.
* libinterp/octave-value/ov-classdef/cc (package_getAllPackages): New
static function.
(install_classdef): Install it as "meta.package,getAllPackages" method.
author | Michael Goffioul <michael.goffioul@gmail.com> |
---|---|
date | Mon, 20 May 2013 14:37:25 -0400 |
parents | 04e110438873 |
children | 50c8831878d2 |
line wrap: on
line diff
--- a/libinterp/octave-value/ov-classdef.cc +++ b/libinterp/octave-value/ov-classdef.cc @@ -2731,6 +2731,32 @@ return retval; } +static octave_value_list +package_getAllPackages (const octave_value_list& /* args */, + int /* nargout */) +{ + std::map<std::string, cdef_package> toplevel_packages; + + std::list<std::string> names = load_path::get_all_package_names (); + + toplevel_packages["meta"] = cdef_manager::find_package ("meta", false, + false); + + for (std::list<std::string>::const_iterator it = names.begin (); + it != names.end (); ++it) + toplevel_packages[*it] = cdef_manager::find_package (*it, false, true); + + Cell c (toplevel_packages.size (), 1); + + int i = 0; + + for (std::map<std::string, cdef_package>::const_iterator it = toplevel_packages.begin (); + it != toplevel_packages.end (); ++it) + c(i++,0) = to_ov (it->second); + + return octave_value_list (octave_value (c)); +} + void cdef_package::cdef_package_rep::install_class (const cdef_class& cls, const std::string& nm) @@ -3018,6 +3044,8 @@ "public", Matrix (), "private")); meta_package.install_method (make_method (meta_package, "fromName", package_fromName, "public", true)); + meta_package.install_method (make_method (meta_package, "getAllPackages", package_getAllPackages, + "public", true)); /* create "meta" package */ cdef_package package_meta = cdef_package::_meta = make_package ("meta");