mirror of
https://github.com/textmate/textmate.git
synced 2026-01-21 04:38:13 -05:00
fixup! Optimize path::disambiguate
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user