fixup! Optimize path::disambiguate

This commit is contained in:
Allan Odgaard
2013-01-20 08:29:08 +01:00
parent 5627d201db
commit 6bdf883abf
2 changed files with 41 additions and 5 deletions

View File

@@ -653,14 +653,22 @@ namespace path
});
std::vector<size_t> levels(paths.size());
for(size_t i = 0; i < v.size(); ++i)
for(size_t i = 0; i < v.size(); )
{
std::string const& current = paths[v[i]];
size_t above = 0, below = 0;
if(i != 0)
above = count_slashes(paths[v[i]], paths[v[i-1]]);
if(i != v.size()-1)
below = count_slashes(paths[v[i]], paths[v[i+1]]);
levels[v[i]] = std::max(above, below);
above = count_slashes(current, paths[v[i-1]]);
size_t j = i;
while(j < v.size() && current == paths[v[j]])
++j;
if(j < v.size())
below = count_slashes(current, paths[v[j]]);
for(; i < j; ++i)
levels[v[i]] = std::max(above, below);
}
return levels;

View File

@@ -40,6 +40,34 @@ public:
run_test(paths3, "qux — a/baz");
}
void test_disambiguate_paths_duplicates ()
{
std::vector<std::string> paths{
"/Users/duff/Projects/Avian",
"/Users/duff/Projects/TextMate",
"/Users/duff/public/macromates_com",
"/Users/duff/Projects/macromates_com",
"/Users/duff/public/macromates_com",
"/Users/duff/Projects/api_textmate_org",
"/Users/duff/Library/Application Support/TextMate",
"/Users/duff/Projects/Avian",
"/Users/duff/build/public/macromates_com",
};
std::vector<size_t> parents = path::disambiguate(paths);
TS_ASSERT_EQUALS(parents.size(), paths.size());
TS_ASSERT_EQUALS(parents[0], 0);
TS_ASSERT_EQUALS(parents[1], 1);
TS_ASSERT_EQUALS(parents[2], 2);
TS_ASSERT_EQUALS(parents[3], 1);
TS_ASSERT_EQUALS(parents[4], 2);
TS_ASSERT_EQUALS(parents[5], 0);
TS_ASSERT_EQUALS(parents[6], 1);
TS_ASSERT_EQUALS(parents[7], 0);
TS_ASSERT_EQUALS(parents[8], 2);
}
void test_localisation ()
{
test::jail_t jail;