/*
- Copyright (C) 2007 Tim Mayberry
+ Copyright (C) 2007 Tim Mayberry
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
add_directories (paths);
}
+void
+Searchpath::remove_directory (const std::string& directory_path)
+{
+ if (directory_path.empty()) {
+ return;
+ }
+
+ for (vector<std::string>::iterator i = begin(); i != end();) {
+ if (*i == directory_path) {
+ i = erase (i);
+ } else {
+ ++i;
+ }
+ }
+}
+
+void
+Searchpath::remove_directories (const vector<std::string>& paths)
+{
+ for(vector<std::string>::const_iterator i = paths.begin(); i != paths.end(); ++i) {
+ remove_directory (*i);
+ }
+}
+
void
Searchpath::add_directory (const std::string& directory_path)
{
- if (!directory_path.empty()) {
- push_back(directory_path);
+ if (directory_path.empty()) {
+ return;
+ }
+ for (vector<std::string>::const_iterator i = begin(); i != end(); ++i) {
+ if (*i == directory_path) {
+ return;
+ }
}
+ push_back(directory_path);
}
void
return *this;
}
-Searchpath&
+const Searchpath
Searchpath::operator+ (const std::string& directory_path)
{
- add_directory (directory_path);
+ return Searchpath (*this) += directory_path;
+}
+
+const Searchpath
+Searchpath::operator+ (const Searchpath& spath)
+{
+ return Searchpath (*this) += spath;
+}
+
+Searchpath&
+Searchpath::operator-= (const Searchpath& spath)
+{
+ remove_directories (spath);
return *this;
}
Searchpath&
-Searchpath::operator+ (const Searchpath& spath)
+Searchpath::operator-= (const std::string& directory_path)
{
- // concatenate paths into new Searchpath
- insert(end(), spath.begin(), spath.end());
+ remove_directory (directory_path);
return *this;
}
+
Searchpath&
Searchpath::add_subdirectory_to_paths (const string& subdir)
{
for (vector<std::string>::iterator i = begin(); i != end(); ++i) {
- // should these new paths just be added to the end of
+ // should these new paths just be added to the end of
// the search path rather than replace?
*i = Glib::build_filename (*i, subdir);
}
-
+
return *this;
}
* whole idea, and we put it here for convenience.
*/
-void
+void
export_search_path (const string& base_dir, const char* varname, const char* dir)
{
string path;