commit 819adecb0a4423434700ed55e3a1964ad27a0a5a
parent b00ff42fa9e5a88e3184377b7bedfdd6ebf1acb3
Author: cfillion <cfillion@users.noreply.github.com>
Date: Tue, 26 Jan 2016 13:54:40 -0800
preserve the insertion order of remotes
Diffstat:
2 files changed, 30 insertions(+), 20 deletions(-)
diff --git a/src/remote.cpp b/src/remote.cpp
@@ -159,34 +159,48 @@ void RemoteList::add(const Remote &remote)
if(!remote.isValid())
return;
- m_remotes[remote.name()] = remote;
+ size_t index = 0;
+ const auto it = m_map.find(remote.name());
+
+ if(it == m_map.end()) {
+ // insert remote
+ index = m_remotes.size();
+ m_remotes.push_back(remote);
+ }
+ else {
+ // replace remote
+ index = it->second;
+ m_remotes[index] = remote;
+ }
+
+ m_map[remote.name()] = index;
}
void RemoteList::remove(const string &name)
{
- const auto it = m_remotes.find(name);
+ const auto it = m_map.find(name);
- if(it != m_remotes.end())
- m_remotes.erase(it);
+ if(it != m_map.end()) {
+ m_remotes.erase(m_remotes.begin() + it->second);
+ m_map.erase(it);
+ }
}
Remote RemoteList::get(const string &name) const
{
- const auto it = m_remotes.find(name);
+ const auto it = m_map.find(name);
- if(it == m_remotes.end())
+ if(it == m_map.end())
return {};
else
- return it->second;
+ return m_remotes[it->second];
}
vector<Remote> RemoteList::getEnabled() const
{
vector<Remote> list;
- for(const auto &pair : m_remotes) {
- const Remote &remote = pair.second;
-
+ for(const Remote &remote : m_remotes) {
if(remote.isEnabled())
list.push_back(remote);
}
diff --git a/src/remote.hpp b/src/remote.hpp
@@ -18,7 +18,6 @@
#ifndef REAPACK_REMOTE_HPP
#define REAPACK_REMOTE_HPP
-#include <boost/range/adaptor/map.hpp>
#include <map>
#include <string>
#include <vector>
@@ -68,9 +67,6 @@ private:
};
class RemoteList {
-private:
- std::map<std::string, Remote> m_remotes;
-
public:
void add(const Remote &);
void remove(const Remote &remote) { remove(remote.name()); }
@@ -80,14 +76,14 @@ public:
bool empty() const { return m_remotes.empty(); }
size_t size() const { return m_remotes.size(); }
- bool hasName(const std::string &name) const
- { return m_remotes.count(name) > 0; }
+ bool hasName(const std::string &name) const { return m_map.count(name) > 0; }
- auto begin() const -> decltype(boost::adaptors::values(m_remotes).begin())
- { return boost::adaptors::values(m_remotes).begin(); }
+ auto begin() const { return m_remotes.begin(); }
+ auto end() const { return m_remotes.end(); }
- auto end() const -> decltype(boost::adaptors::values(m_remotes).end())
- { return boost::adaptors::values(m_remotes).end(); }
+private:
+ std::vector<Remote> m_remotes;
+ std::map<std::string, size_t> m_map;
};
#endif