# # patch "ChangeLog" # from [38099db924c0943fae7d5896fc743c8eed8e15e9] # to [b2f665042f33e0f06138ec488692ad9604e78490] # # patch "change_set.cc" # from [0f26497e115e7818f164f2c3d9a469c6e784f742] # to [c9554a69662fecf70ead4b8fec54eab5c355118a] # # patch "smap.hh" # from [bf2f49a88508bb21de8bc201c02e3050835a6d95] # to [8fb308c5059d3d572a078c96a6937ed989b425ec] # --- ChangeLog +++ ChangeLog @@ -1,3 +1,10 @@ +2005-04-14 Matt Johnston + + * change_set.cc (confirm_unique_entries_in_directories): use a + std::vector rather than std::map for better performance (only sort + once). + * smap.hh: an invariant + 2005-04-14 Jeremy Cowgar * monotone.texi (Making Changes): Fixed duplicate paragraph --- change_set.cc +++ change_set.cc @@ -550,8 +550,8 @@ static void confirm_unique_entries_in_directories(path_state const & ps) -{ - std::map, bool> entries; +{ + std::vector > entries; for (path_state::const_iterator i = ps.begin(); i != ps.end(); ++i) { if (null_name(path_item_name(i->second))) @@ -562,9 +562,27 @@ std::pair p = std::make_pair(path_item_parent(i->second), path_item_name(i->second)); - I(entries.find(p) == entries.end()); - entries.insert(std::make_pair(p,true)); + entries.push_back(p); } + + // Now we check that entries is unique + if (entries.empty()) + return; + + std::sort(entries.begin(), entries.end()); + + std::vector >::const_iterator leader, lagged; + leader = entries.begin(); + lagged = entries.begin(); + + I(leader != entries.end()); + ++leader; + while (leader != entries.end()) + { + I(*leader != *lagged); + ++leader; + ++lagged; + } } static void --- smap.hh +++ smap.hh @@ -88,6 +88,7 @@ const_iterator leader, lagged; lagged = begin(); leader = begin(); + I(leader != end()); ++leader; for (; leader != end(); ++lagged, ++leader) I(lagged->first != leader->first);