reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

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:
Msrc/remote.cpp | 34++++++++++++++++++++++++----------
Msrc/remote.hpp | 16++++++----------
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