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