Drop maintaining SiteList in order. Instead, explicitly sort by the tld
key when needed.
---
 SiteSetting.cc  | 20 ++------------------
 SiteSetting.h   | 10 +++-------
 gui/SitePage.cc |  4 ++++
 3 files changed, 9 insertions(+), 25 deletions(-)

diff --git a/SiteSetting.cc b/SiteSetting.cc
index a20b9bd..8ec42af 100644
--- a/SiteSetting.cc
+++ b/SiteSetting.cc
@@ -162,33 +162,17 @@ site_list_type::site_list_type (const std::string &_url,
 bool
 site_list_type::operator == (site_list_type const &rhs) const
 {
+  // compare by key for historical reasons, should be identical to comparing 
by url
   return stricmp (key.c_str(), rhs.key.c_str()) == 0;
 }
 
-bool
-site_list_type::operator < (site_list_type const &rhs) const
-{
-  return stricmp (key.c_str(), rhs.key.c_str()) < 0;
-}
-
-/*
-  A SiteList is maintained as an in-order std::vector of site_list_type, by
-  replacing it with a new object with the new item inserted in the correct
-  place.
-
-  Yes, we could just use an ordered container, instead.
-*/
 void
 site_list_insert(SiteList &site_list, site_list_type newsite)
 {
   SiteList::iterator i = find (site_list.begin(), site_list.end(), newsite);
   if (i == site_list.end())
     {
-      SiteList result;
-      merge (site_list.begin(), site_list.end(),
-             &newsite, &newsite + 1,
-             inserter (result, result.begin()));
-      site_list = result;
+      site_list.push_back (newsite);
     }
   else
     *i = newsite;
diff --git a/SiteSetting.h b/SiteSetting.h
index daac593..2fbef89 100644
--- a/SiteSetting.h
+++ b/SiteSetting.h
@@ -39,6 +39,7 @@ public:
                   const std::string& , const std::string&, bool, bool = false,
                   const std::string& = "");
   ~site_list_type () {};
+
   std::string url;
   // provided by mirrors.lst but not used
   std::string servername;
@@ -50,16 +51,11 @@ public:
   bool noshow;
   // url to redirect to
   std::string redir;
-
+  // displayed_url is protocol and site name part of url
   std::string displayed_url;
-  // sort key
+  // tld sort key
   std::string key;
   bool operator == (const site_list_type &) const;
-  bool operator != (const site_list_type &) const;
-  bool operator < (const site_list_type &) const;
-  bool operator <= (const site_list_type &) const;
-  bool operator > (const site_list_type &) const;
-  bool operator >= (const site_list_type &) const;
 };
 
 typedef std::vector <site_list_type> SiteList;
diff --git a/gui/SitePage.cc b/gui/SitePage.cc
index fe47232..e8ebc8c 100644
--- a/gui/SitePage.cc
+++ b/gui/SitePage.cc
@@ -281,6 +281,10 @@ get_site_list (Feedback &feedback)
   delete[] theMirrorString;
   delete[] theCachedString;
 
+  // sort all_site_list by 'tld key'
+  std::sort(all_site_list.begin(), all_site_list.end(),
+            [] (site_list_type const &a, site_list_type const &b) { return 
a.key < b.key; });
+
   migrate_selected_site_list();
 
   return 0;
-- 
2.51.0

Reply via email to