diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2017-03-09 16:00:00 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2017-03-09 16:00:00 +0200 |
commit | 80d717aa12fbaa230a194c1902ea28e0a1b86586 (patch) | |
tree | 27cf021b38fce3e1d0789ef17b2fb4bf32b7a7d8 | |
parent | 56348d4c801262ee92a982fbd8dc77de1da6e188 (diff) |
Spec path_search() enhancements
-rw-r--r-- | butl/filesystem | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/butl/filesystem b/butl/filesystem index a125dab..5a8eb91 100644 --- a/butl/filesystem +++ b/butl/filesystem @@ -418,7 +418,7 @@ namespace butl path_match (const std::string& pattern, const std::string& name); // Search for paths matching the pattern calling the specified function for - // each matching path. Stop the search if the function returns false. + // each matching path (see below for details). // // If the pattern is relative, then search in the start directory. If the // start directory is empty, then search in the current working directory. @@ -445,10 +445,36 @@ namespace butl // calling func(foo/fox/box/) twice: first time for being a child of fox/, // second time for being a child of foo/. // + // The callback function is called for both intermediate matches (interm is + // true) and final matches (interm is false). Pattern is what matched the + // last component in the path and is empty if the last component is not a + // pattern (final match only; say as in */foo.txt). + // + // If the callback function returns false for an intermediate path, then no + // further search is performed at or below this path. If false is returned + // for a final match, then the entire search is stopped. + // + // The path can be moved for the final match or for an intermediate match + // but only if false is returned. + // + // As an example, consider pattern f*/bar/b*/*.txt and path + // foo/bar/baz/x.txt. The sequence of calls in this case will be: + // + // (foo/, f*/, true) + // (foo/bar/baz/, b*/, true) + // (foo/bar/baz/x.txt, *.txt, false) + // LIBBUTL_EXPORT void path_search (const path& pattern, const std::function<bool (path&&)>&, const dir_path& start = dir_path ()); + /* + LIBBUTL_EXPORT void + path_search ( + const path& pattern, + const std::function<bool (path&&, const string& pattern, bool interm)>&, + const dir_path& start = dir_path ()); + */ } #include <butl/filesystem.ixx> |