#
# patch "ChangeLog"
# from [7039b53ab4bb5bb7e95a89965bf60bc1554d1053]
# to [e42c135e922a9f538b83fbe9931b863e4e737541]
#
# 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 Nathaniel Smith
* tests/t_vcheck.at: Update notes.
--- 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);