24 #if ! defined (octave_load_path_h) 25 #define octave_load_path_h 1 27 #include "octave-config.h" 48 : package_map (), top_level_package (), dir_info_list (), init_dirs (),
49 m_command_line_path (), add_hook (
load_path::execute_pkg_add),
61 void initialize (
bool set_initial_path =
false);
65 void set (
const std::string&
p,
bool warn =
false,
bool is_init =
false);
69 void prepend (
const std::string& dir,
bool warn =
false);
73 void update (
void)
const;
75 bool contains_canonical (
const std::string& dir_name)
const;
82 return get_package (pack_name).find_method (class_name, meth, dir_name);
90 return find_method (class_name, meth, dir_name, pack_name);
96 return get_package (pack_name).methods (class_name);
99 std::list<std::string> overloads (
const std::string& meth)
const;
103 return (package_map.find (package_name) != package_map.end ());
106 std::list<std::string>
107 get_all_package_names (
bool only_top_level =
true)
const;
112 return get_package (pack_name).find_fcn (
fcn, dir_name);
119 return find_fcn (
fcn, dir_name, pack_name);
126 return get_package (pack_name).find_private_fcn (dir,
fcn);
133 return get_package (pack_name).find_fcn (
fcn, dir_name, M_FILE);
140 return get_package (pack_name).find_fcn (
fcn, dir_name, M_FILE);
147 return get_package (pack_name).find_fcn (
fcn, dir_name, M_FILE);
162 std::list<std::string> dir_list (
void)
const;
170 void display (std::ostream&
os)
const;
178 static void execute_pkg_add (
const std::string& dir);
179 static void execute_pkg_del (
const std::string& dir);
183 if (m_command_line_path.empty ())
184 m_command_line_path =
p;
191 return m_command_line_path;
198 static const int M_FILE = 1;
199 static const int OCT_FILE = 2;
200 static const int MEX_FILE = 4;
214 class_info (
void) : method_file_map (), private_file_map () { }
217 : method_file_map (ci.method_file_map),
218 private_file_map (ci.private_file_map)
255 : dir_name (
d), abs_dir_name (), is_relative (
false),
256 dir_mtime (), dir_time_last_checked (), all_files (), fcn_files (),
257 private_file_map (), method_file_map (), package_dir_map ()
307 : dir_name (
fi.dir_name), types (
fi.types) { }
315 dir_name =
fi.dir_name;
361 typedef std::map<std::string, dir_info::fcn_file_map_type>
378 : m_package_name (package_name), dir_list (), fcn_map (),
384 : m_package_name (l.m_package_name), dir_list (l.dir_list),
385 private_fcn_map (l.private_fcn_map), method_map (l.method_map)
411 add_to_fcn_map (di, at_end, updating);
413 add_to_private_fcn_map (di);
415 add_to_method_map (di, at_end);
418 void move (
const dir_info& di,
bool at_end);
428 private_fcn_map.clear ();
433 void display (std::ostream& out)
const;
437 int type = M_FILE | OCT_FILE | MEX_FILE)
const;
441 int type = M_FILE | OCT_FILE | MEX_FILE)
const;
446 int type = M_FILE | OCT_FILE | MEX_FILE)
const;
448 std::list<std::string> methods (
const std::string& class_name)
const;
450 void overloads (
const std::string& meth, std::list<std::string>& l)
const;
456 void add_to_fcn_map (
const dir_info& di,
bool at_end,
bool updating);
458 void add_to_private_fcn_map (
const dir_info& di);
460 void add_to_method_map (
const dir_info& di,
bool at_end);
465 void move_method_map (
const std::string& dir,
bool at_end);
470 void remove_private_fcn_map (
const std::string& dir);
477 void print_types (std::ostream&
os,
int types)
const;
479 void print_fcn_list (std::ostream&
os,
528 void add (
const std::string& dir,
bool at_end,
bool warn);
531 bool updating =
false)
const;
537 if (!
name.empty () && is_package (
name))
541 if (l == package_map.end ())
542 l = package_map.insert (package_map.end (),
548 return top_level_package;
551 string_vector get_file_list (
const dir_info::fcn_file_map_type& lst)
const;
fcn_file_map_type private_file_map
method_file_map_type method_file_map
file_info_list_type::iterator file_info_list_iterator
std::map< std::string, fcn_map_type > method_map_type
std::string find_fcn(const std::string &fcn, const std::string &pack_name="")
For example cd octave end example noindent changes the current working directory to file
std::string m_package_name
file_info(const file_info &fi)
std::string find_method(const std::string &class_name, const std::string &meth, const std::string &pack_name="")
std::string system_path(void) const
F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE * f
static std::string path_sep_str(void)
fcn_map_type::iterator fcn_map_iterator
method_map_type method_map
std::string get_command_line_path(void) const
private_fcn_map_type::iterator private_fcn_map_iterator
abs_dir_cache_type::iterator abs_dir_cache_iterator
file_info_list_type::const_iterator const_file_info_list_iterator
std::string find_oct_file(const std::string &fcn, const std::string &pack_name="")
dir_info_list_type::iterator dir_info_list_iterator
package_info & get_package(const std::string &name) const
private_fcn_map_type private_fcn_map
sys::time dir_time_last_checked
OCTAVE_EXPORT octave_value_list return the number of command line arguments passed to Octave If called with the optional argument the function t
std::string find_mex_file(const std::string &fcn, const std::string &pack_name="")
fcn_file_map_type::iterator fcn_file_map_iterator
std::string find_method(const std::string &class_name, const std::string &meth, std::string &dir_name, const std::string &pack_name="")
hook_fcn_ptr get_add_hook(void)
std::list< dir_info > dir_info_list_type
std::string find_fcn_file(const std::string &fcn, const std::string &pack_name="")
dir_info_list_type::const_iterator const_dir_info_list_iterator
std::map< std::string, package_info > package_map_type
std::map< std::string, int > fcn_file_map_type
void add(const dir_info &di, bool at_end, bool updating)
F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE * d
std::string m_command_line_path
static void initialize(void)
class_info(const class_info &ci)
package_map_type::const_iterator const_package_map_iterator
nd deftypefn *std::string name
std::list< file_info > file_info_list_type
package_info(const package_info &l)
std::string find_private_fcn(const std::string &dir, const std::string &fcn, const std::string &pack_name="")
std::string find_fcn(const std::string &fcn, std::string &dir_name, const std::string &pack_name="")
private_fcn_map_type::const_iterator const_private_fcn_map_iterator
package_map_type package_map
file_info(const std::string &d, int t)
method_file_map_type::const_iterator const_method_file_map_iterator
fcn_file_map_type method_file_map
static abs_dir_cache_type abs_dir_cache
void set_remove_hook(hook_fcn_ptr f)
std::set< std::string > init_dirs
fcn_map_type::const_iterator const_fcn_map_iterator
std::string genpath(const std::string &dirname, const string_vector &skip)
void set_command_line_path(const std::string &p)
package_map_type::iterator package_map_iterator
bool find_package(const std::string &package_name) const
static std::list< std::string > find_first_of(const std::string &path, const std::list< std::string > &names, bool all)
package_dir_map_type::const_iterator const_package_dir_map_iterator
dir_info_list_type dir_info_list
file_info & operator=(const file_info &)=default
std::map< std::string, dir_info > abs_dir_cache_type
method_file_map_type::iterator method_file_map_iterator
load_path::dir_info::fcn_file_map_type get_fcn_files(const std::string &d)
package_dir_map_type package_dir_map
std::list< std::string > methods(const std::string &class_name, const std::string &pack_name="")
method_map_type::const_iterator const_method_map_iterator
otherwise an error message is printed The permission mask is a UNIX concept used when creating new objects on a file system such as files
method_map_type::iterator method_map_iterator
package_info top_level_package
package_info(const std::string &package_name="")
std::map< std::string, class_info > method_file_map_type
std::map< std::string, dir_info > package_dir_map_type
dir_info(const std::string &d)
std::map< std::string, file_info_list_type > fcn_map_type
void set_add_hook(hook_fcn_ptr f)
fcn_file_map_type private_file_map
fcn_file_map_type::const_iterator const_fcn_file_map_iterator
hook_fcn_ptr get_remove_hook(void)
If this string is the system will ring the terminal sometimes it is useful to be able to print the original representation of the string
abs_dir_cache_type::const_iterator const_abs_dir_cache_iterator
std::list< std::string > dir_list
package_dir_map_type::iterator package_dir_map_iterator
static std::string sys_path
std::map< std::string, dir_info::fcn_file_map_type > private_fcn_map_type