Add common_ancestor function
authorMikko Rasa <tdb@tdb.fi>
Tue, 10 Jul 2012 15:25:39 +0000 (18:25 +0300)
committerMikko Rasa <tdb@tdb.fi>
Tue, 10 Jul 2012 15:25:39 +0000 (18:25 +0300)
source/fs/utils.cpp
source/fs/utils.h

index a34dd4e54ca86d6baf72a877cea30d6daa959c91..1da18591b1c87119c2fccd0012898af78c5e3412 100644 (file)
@@ -154,6 +154,16 @@ Path relative(const Path &path, const Path &base)
        return result;
 }
 
+Path common_ancestor(const Path &path1, const Path &path2)
+{
+       Path::Iterator i = path1.begin();
+       Path::Iterator j = path2.begin();
+       Path result;
+       for(; (i!=path1.end() && j!=path2.end() && *i==*j); ++i, ++j)
+               result /= *i;
+       return result;
+}
+
 int descendant_depth(const Path &path, const Path &parent)
 {
        Path::Iterator i = path.begin();
index df7bc76b8d5add12bae4cb3daae6cf4027d3a3a1..a52e37d8ed6f3321c748d5df793ce58c77b700e3 100644 (file)
@@ -38,6 +38,9 @@ void rename(const Path &from, const Path &to);
 /// Makes a path relative to some base path.  That is, base/result==path.
 Path relative(const Path &path, const Path &base);
 
+/// Returns the longest prefix shared by both paths.
+Path common_ancestor(const Path &, const Path &);
+
 /** Determines how many levels a path is below another.  Returns -1 if path is
 not a descendant of parent. */
 int descendant_depth(const Path &path, const Path &parent);