X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fpbd%2Fsearch_path.h;h=74ac764dc0b6febba25590a14947b4f6b710e933;hb=ea32eecf3d2fa22c87350a3b198f8c13707627c6;hp=3b10d4a3198c3582b9a71729650ae99b597abeeb;hpb=449aab3c465bbbf66d221fac3d7ea559f1720357;p=ardour.git diff --git a/libs/pbd/pbd/search_path.h b/libs/pbd/pbd/search_path.h index 3b10d4a319..74ac764dc0 100644 --- a/libs/pbd/pbd/search_path.h +++ b/libs/pbd/pbd/search_path.h @@ -17,43 +17,37 @@ */ -#ifndef PBD_SEARCH_PATH_INCLUDED -#define PBD_SEARCH_PATH_INCLUDED +#ifndef __libpbd_search_path_h__ +#define __libpbd_search_path_h__ #include #include -#include +#include "pbd/libpbd_visibility.h" namespace PBD { -using std::string; -using std::vector; - /** - * @class The SearchPath class is a helper class for getting a + * @class Searchpath + * + * The Searchpath class is a helper class for getting a * vector of paths contained in a search path string where a * "search path string" contains absolute directory paths * separated by a colon(:) or a semi-colon(;) on windows. * - * The SearchPath class does not test whether the paths exist + * The Searchpath class does not test whether the paths exist * or are directories. It is basically just a container. */ -class SearchPath { -public: - - typedef std::vector::iterator iterator; - typedef std::vector::const_iterator const_iterator; - +class LIBPBD_TEMPLATE_API Searchpath : public std::vector +{ public: - /** - * Create an empty SearchPath. + * Create an empty Searchpath. */ - SearchPath (); + LIBPBD_TEMPLATE_MEMBER_API Searchpath (); /** - * Initialize SearchPath from a string where the string contains + * Initialize Searchpath from a string where the string contains * one or more absolute paths to directories which are delimited * by a path separation character. The path delimeter is a * colon(:) on unix and a semi-colon(;) on windows. @@ -63,64 +57,17 @@ public: * * @param search_path A path string. */ - SearchPath (const string& search_path); + LIBPBD_TEMPLATE_MEMBER_API Searchpath (const std::string& search_path); /** - * Initialize SearchPath from a sys::path. - * - * @param directory_path A directory path. - */ - SearchPath (const sys::path& directory_path); - - /** - * Initialize SearchPath from a vector of paths that may or may + * Initialize Searchpath from a vector of paths that may or may * not exist. * - * @param path A path. - */ - SearchPath (const vector& paths); - - /** - * The copy constructor does what you would expect and copies the - * vector of paths contained by the SearchPath. + * @param paths A vector of paths. */ - SearchPath (const SearchPath& search_path); + LIBPBD_TEMPLATE_MEMBER_API Searchpath (const std::vector& paths); - /** - * Indicate whether there are any directory paths in m_dirs. - * - * If SearchPath is initialized with an empty string as the - * result of for instance the contents of an unset environment - * variable. - * - * @return true if there are any paths in m_paths. - */ - operator void* () const { return (void*)!m_dirs.empty(); } - - /** - * @return a read/write iterator that points to the first - * path in the SearchPath. Iteration is done in ordinary - * element order. - */ - iterator begin () { return m_dirs.begin(); } - - /** - * @return A read-only (constant) iterator that points to the - * first path in the SearchPath. - */ - const_iterator begin () const { return m_dirs.begin(); } - - /** - * @return A read/write iterator that points one past the last - * path in the SearchPath. - */ - iterator end () { return m_dirs.end(); } - - /** - * @return A read-only (constant) iterator that points one past - * the last path in the SearchPath. - */ - const_iterator end () const { return m_dirs.end(); } + LIBPBD_TEMPLATE_MEMBER_API ~Searchpath () {}; /** * @return a search path string. @@ -128,56 +75,56 @@ public: * The string that is returned contains the platform specific * path separator. */ - const string to_string () const; - - /** - * Assignment of another SearchPath to this. - */ - SearchPath& operator= (const SearchPath& spath); + LIBPBD_TEMPLATE_MEMBER_API const std::string to_string () const; /** * Add all the directories in path to this. */ - SearchPath& operator+= (const SearchPath& spath); + LIBPBD_TEMPLATE_MEMBER_API Searchpath& operator+= (const Searchpath& spath); /** * Add another directory path to the search path. */ - SearchPath& operator+= (const sys::path& directory_path); + LIBPBD_TEMPLATE_MEMBER_API Searchpath& operator+= (const std::string& directory_path); /** - * Concatenate another SearchPath onto this. + * Concatenate another Searchpath onto this. */ - SearchPath& operator+ (const SearchPath& other); + LIBPBD_TEMPLATE_MEMBER_API const Searchpath operator+ (const Searchpath& other); /** * Add another path to the search path. */ - SearchPath& operator+ (const sys::path& directory_path); + LIBPBD_TEMPLATE_MEMBER_API const Searchpath operator+ (const std::string& directory_path); /** - * Add a sub-directory to each path in the search path. - * @param subdir The directory name, it should not contain - * any path separating tokens. + * Remove all the directories in path from this. + */ + LIBPBD_TEMPLATE_MEMBER_API Searchpath& operator-= (const Searchpath& spath); + + /** + * Remove a directory path from the search path. */ - SearchPath& add_subdirectory_to_paths (const string& subdir); + LIBPBD_TEMPLATE_MEMBER_API Searchpath& operator-= (const std::string& directory_path); /** * Add a sub-directory to each path in the search path. - * @see add_subdirectory_to_paths + * @param subdir The directory name, it should not contain + * any path separating tokens. */ - SearchPath& operator/= (const string& subdir); + LIBPBD_TEMPLATE_MEMBER_API Searchpath& add_subdirectory_to_paths (const std::string& subdir); protected: - void add_directory (const sys::path& directory_path); + LIBPBD_TEMPLATE_MEMBER_API void add_directory (const std::string& directory_path); + LIBPBD_TEMPLATE_MEMBER_API void add_directories (const std::vector& paths); + LIBPBD_TEMPLATE_MEMBER_API void remove_directory (const std::string& directory_path); + LIBPBD_TEMPLATE_MEMBER_API void remove_directories (const std::vector& paths); +}; - void add_directories (const vector& paths); - - vector m_dirs; +LIBPBD_API void export_search_path (const std::string& base_dir, const char* varname, const char* dir); -}; } // namespace PBD -#endif +#endif /* __libpbd_search_path_h__ */