diff options
author | Henning Baldersheim <balder@oath.com> | 2018-09-27 20:59:31 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@oath.com> | 2018-09-28 10:38:24 +0200 |
commit | 9fc97bb6afe49efa1dc676c91d32a4cf365a92ba (patch) | |
tree | dd81139eb68357598cc0b84af5955244a444ecd3 /slobrok/src | |
parent | 94da82801334a586aa1581a8e5b8591aa90d8e94 (diff) |
Modernise code and use smart pointers and favor std containers over homegrown specialized classes.
Diffstat (limited to 'slobrok/src')
-rw-r--r-- | slobrok/src/vespa/slobrok/server/rpc_server_map.h | 3 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/visible_map.cpp | 50 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/visible_map.h | 15 |
3 files changed, 32 insertions, 36 deletions
diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_map.h b/slobrok/src/vespa/slobrok/server/rpc_server_map.h index 4ebccd12b36..dd11a6c410e 100644 --- a/slobrok/src/vespa/slobrok/server/rpc_server_map.h +++ b/slobrok/src/vespa/slobrok/server/rpc_server_map.h @@ -2,9 +2,6 @@ #pragma once #include "visible_map.h" -#include <unordered_map> -#include <string> -#include <memory> namespace slobrok { diff --git a/slobrok/src/vespa/slobrok/server/visible_map.cpp b/slobrok/src/vespa/slobrok/server/visible_map.cpp index 4188d1603e3..9508af74c9e 100644 --- a/slobrok/src/vespa/slobrok/server/visible_map.cpp +++ b/slobrok/src/vespa/slobrok/server/visible_map.cpp @@ -13,23 +13,21 @@ VisibleMap::updated() _genCnt.add(); WaitList waitList; std::swap(waitList, _waitList); - for (uint32_t i = 0; i < waitList.size(); ++i) { - waitList[i]->updated(*this); + for (auto & entry : waitList) { + entry->updated(*this); } } - void VisibleMap::aborted() { WaitList waitList; std::swap(waitList, _waitList); - for (uint32_t i = 0; i < waitList.size(); ++i) { - waitList[i]->aborted(*this); + for (auto & entry : waitList) { + entry->aborted(*this); } } - void VisibleMap::addUpdateListener(IUpdateListener *l) { @@ -56,14 +54,19 @@ VisibleMap::removeUpdateListener(IUpdateListener *l) //----------------------------------------------------------------------------- +NamedService * +VisibleMap::lookup(const char *name) const { + auto found = _map.find(name); + return (found == _map.end()) ? nullptr : found->second; +} + std::vector<const NamedService *> VisibleMap::lookupPattern(const char *pattern) const { std::vector<const NamedService *> retval; - for (iter_t it = _map.iterator(); it.valid(); it.next()) - { - if (match(it.key(), pattern)) { - retval.push_back(it.value()); + for (const auto & entry : _map) { + if (match(entry.first.c_str(), pattern)) { + retval.push_back(entry.second); } } return retval; @@ -75,9 +78,8 @@ VisibleMap::allVisible() const { std::vector<const NamedService *> retval; // get list of all names in myrpcsrvmap - for (iter_t it = _map.iterator(); it.valid(); it.next()) - { - retval.push_back(it.value()); + for (const auto & entry : _map) { + retval.push_back(entry.second); } return retval; } @@ -88,8 +90,8 @@ void VisibleMap::addNew(NamedService *rpcsrv) { LOG_ASSERT(rpcsrv != nullptr); - LOG_ASSERT(_map.isSet(rpcsrv->getName()) == false); - _map.set(rpcsrv->getName(), rpcsrv); + LOG_ASSERT(_map.find(rpcsrv->getName()) == _map.end()); + _map[rpcsrv->getName()] = rpcsrv; _history.add(rpcsrv->getName(), _genCnt); updated(); @@ -99,7 +101,8 @@ VisibleMap::addNew(NamedService *rpcsrv) NamedService * VisibleMap::remove(const char *name) { - NamedService *d = _map.remove(name); + NamedService *d = _map[name]; + _map.erase(name); if (d != nullptr) { _history.add(name, _genCnt); updated(); @@ -112,11 +115,10 @@ NamedService * VisibleMap::update(NamedService *rpcsrv) { LOG_ASSERT(rpcsrv != nullptr); - NamedService *d = _map.remove(rpcsrv->getName()); + NamedService *d = rpcsrv; + std::swap(d, _map[rpcsrv->getName()]); LOG_ASSERT(d != nullptr); - _map.set(rpcsrv->getName(), rpcsrv); - _history.add(rpcsrv->getName(), _genCnt); updated(); @@ -128,13 +130,11 @@ VisibleMap::history(const vespalib::GenCnt& gen) const { MapDiff retval; std::set<std::string> names = _history.since(gen); - for (std::set<std::string>::iterator it = names.begin(); - it != names.end(); - ++it) + for (const auto & name : names) { - const NamedService *val = lookup(it->c_str()); + const NamedService *val = lookup(name.c_str()); if (val == nullptr) { - retval.removed.push_back(*it); + retval.removed.push_back(name); } else { retval.updated.push_back(val); } @@ -146,7 +146,7 @@ VisibleMap::MapDiff::MapDiff() = default; VisibleMap::MapDiff::~MapDiff() = default; VisibleMap::VisibleMap() - : _map(nullptr), + : _map(), _waitList(), _genCnt(1) { diff --git a/slobrok/src/vespa/slobrok/server/visible_map.h b/slobrok/src/vespa/slobrok/server/visible_map.h index 0bd809bf4ef..4c7c76bbdc0 100644 --- a/slobrok/src/vespa/slobrok/server/visible_map.h +++ b/slobrok/src/vespa/slobrok/server/visible_map.h @@ -3,7 +3,9 @@ #include "history.h" #include "named_service.h" -#include <vespa/vespalib/util/hashmap.h> +#include <unordered_map> +#include <string> +#include <memory> namespace slobrok { @@ -13,9 +15,6 @@ namespace slobrok { * name->spec mappings visible to the world **/ -using vespalib::HashMap; - - class VisibleMap { public: @@ -46,10 +45,10 @@ public: }; private: - HashMap<NamedService *> _map; - typedef HashMap<NamedService *>::Iterator iter_t; + using Map = std::unordered_map<std::string, NamedService *>; + using WaitList = std::vector<IUpdateListener *>; - typedef std::vector<IUpdateListener *> WaitList; + Map _map; WaitList _waitList; vespalib::GenCnt _genCnt; History _history; @@ -67,7 +66,7 @@ public: NamedService *remove(const char *name); NamedService *update(NamedService *rpcsrv); - NamedService *lookup(const char *name) const { return _map[name]; } + NamedService *lookup(const char *name) const; RpcSrvlist lookupPattern(const char *pattern) const; RpcSrvlist allVisible() const; |