diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-06-26 11:38:31 -0700 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-06-26 11:38:31 -0700 |
| commit | c287ae4d1d0cb6448e556dda2c5c98eee4898cfe (patch) | |
| tree | 23cb50d5a31b3701e7b26bece39b63e954707dd4 /node/Node.hpp | |
| parent | daebce499402b489e4825cf8927c57be9b744397 (diff) | |
| download | infinitytier-c287ae4d1d0cb6448e556dda2c5c98eee4898cfe.tar.gz infinitytier-c287ae4d1d0cb6448e556dda2c5c98eee4898cfe.zip | |
Redo conversion of _networks to a vector. Just use a simple linear search and put the nwid in a pair with the pointer so linear search can be done without pointer chasing. This should be the fastest option for anything less than dozens of networks, and should save memory over the old map.
Diffstat (limited to 'node/Node.hpp')
| -rw-r--r-- | node/Node.hpp | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/node/Node.hpp b/node/Node.hpp index b0f4ab22..2d2898b5 100644 --- a/node/Node.hpp +++ b/node/Node.hpp @@ -163,8 +163,11 @@ public: inline std::vector< SharedPtr<Network> > allNetworks() const { + std::vector< SharedPtr<Network> > nw; Mutex::Lock _l(_networks_m); - std::vector< SharedPtr<Network> > nw(_networks); + nw.reserve(_networks.size()); + for(std::vector< std::pair< uint64_t, SharedPtr<Network> > >::const_iterator i=_networks.begin();i!=_networks.end();++i) + nw.push_back(i->second); return nw; } @@ -205,21 +208,14 @@ 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>(); + // assumes _networks_m is locked + for(std::vector< std::pair< uint64_t, SharedPtr<Network> > >::const_iterator i=_networks.begin();i!=_networks.end();++i) { + if (i->first == nwid) + return i->second; } + return SharedPtr<Network>(); } RuntimeEnvironment _RR; @@ -237,7 +233,7 @@ private: //Dictionary _localConfig; // persisted as local.conf //Mutex _localConfig_m; - std::vector< SharedPtr<Network> > _networks; + std::vector< std::pair< uint64_t, SharedPtr<Network> > > _networks; Mutex _networks_m; Mutex _backgroundTasksLock; |
