#
# 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);