summaryrefslogtreecommitdiff
path: root/node/Node.hpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-06-22 10:34:55 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-06-22 10:34:55 -0700
commit4aa8449fe1861a702139fb2afe78ddecf7029c63 (patch)
tree8fae71ed99829aa571d3e5e2ff569e1b4755e262 /node/Node.hpp
parent53aad7f6bdaaeabfe7a92dfedd05212745ef0335 (diff)
parent787608b5683eb5df2a8ca0d365438234b5497c60 (diff)
downloadinfinitytier-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.hpp28
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;