diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-06-22 10:34:55 -0700 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-06-22 10:34:55 -0700 |
| commit | 4aa8449fe1861a702139fb2afe78ddecf7029c63 (patch) | |
| tree | 8fae71ed99829aa571d3e5e2ff569e1b4755e262 /node/Node.hpp | |
| parent | 53aad7f6bdaaeabfe7a92dfedd05212745ef0335 (diff) | |
| parent | 787608b5683eb5df2a8ca0d365438234b5497c60 (diff) | |
| download | infinitytier-4aa8449fe1861a702139fb2afe78ddecf7029c63.tar.gz infinitytier-4aa8449fe1861a702139fb2afe78ddecf7029c63.zip | |
Merge branch '_networks_vector' of https://github.com/mwarning/ZeroTierOne into adamierymenko-dev
Diffstat (limited to 'node/Node.hpp')
| -rw-r--r-- | node/Node.hpp | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/node/Node.hpp b/node/Node.hpp index 1d9372e4..b0f4ab22 100644 --- a/node/Node.hpp +++ b/node/Node.hpp @@ -155,19 +155,16 @@ public: len); } - inline SharedPtr<Network> network(uint64_t nwid) + inline SharedPtr<Network> network(uint64_t nwid) const { Mutex::Lock _l(_networks_m); - std::map< uint64_t,SharedPtr<Network> >::iterator nw(_networks.find(nwid)); - return ((nw == _networks.end()) ? SharedPtr<Network>() : nw->second); + return _network(nwid); } inline std::vector< SharedPtr<Network> > allNetworks() const { Mutex::Lock _l(_networks_m); - std::vector< SharedPtr<Network> > nw; - for(std::map< uint64_t,SharedPtr<Network> >::const_iterator n(_networks.begin());n!=_networks.end();++n) - nw.push_back(n->second); + std::vector< SharedPtr<Network> > nw(_networks); return nw; } @@ -208,6 +205,23 @@ public: #endif private: + // for binary search on _networks + struct NetworkComparator { + bool operator()(const SharedPtr<Network> &n,uint64_t nwid) const { + return n->id() < nwid; + } + }; + + inline SharedPtr<Network> _network(uint64_t nwid) const + { + std::vector< SharedPtr<Network> >::const_iterator iter = std::lower_bound(_networks.begin(), _networks.end(), nwid, NetworkComparator()); + if(iter != _networks.end() && (*iter)->id() == nwid) { + return *iter; + } else { + return SharedPtr<Network>(); + } + } + RuntimeEnvironment _RR; RuntimeEnvironment *RR; @@ -223,7 +237,7 @@ private: //Dictionary _localConfig; // persisted as local.conf //Mutex _localConfig_m; - std::map< uint64_t,SharedPtr<Network> > _networks; + std::vector< SharedPtr<Network> > _networks; Mutex _networks_m; Mutex _backgroundTasksLock; |
