]> git.tdb.fi Git - libs/core.git/commitdiff
Add descendant_depth function
authorMikko Rasa <tdb@tdb.fi>
Sun, 10 Apr 2011 13:23:08 +0000 (13:23 +0000)
committerMikko Rasa <tdb@tdb.fi>
Sun, 10 Apr 2011 13:23:08 +0000 (13:23 +0000)
source/utils.cpp
source/utils.h

index 8f06757bda2227f69aa075acc045f1046dba1ce6..4036225a0f2af593584931d1205fe64aeab82199 100644 (file)
@@ -165,5 +165,21 @@ Path relative(const Path &path, const Path &base)
        return result;
 }
 
+int descendant_depth(const Path &path, const Path &parent)
+{
+       Path::Iterator i=path.begin();
+       Path::Iterator j=parent.begin();
+       for(; (i!=path.end() && j!=parent.end() && *i==*j); ++i, ++j) ;
+
+       if(j!=parent.end())
+               return -1;
+       
+       int result = 0;
+       for(; i!=path.end(); ++i)
+               ++result;
+
+       return result;
+}
+
 } // namespace FS
 } // namespace Msp
index c582c2217ba7b489bbd43fb0801904ffb134c013..6a4c55add16f7ec305d40341d7f65fe48d65710b 100644 (file)
@@ -52,6 +52,10 @@ 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);
 
+/** 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);
+
 } // namespace FS
 } // namespace Msp