summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@oath.com>2018-09-27 20:59:31 +0200
committerHenning Baldersheim <balder@oath.com>2018-09-28 10:38:24 +0200
commit9fc97bb6afe49efa1dc676c91d32a4cf365a92ba (patch)
treedd81139eb68357598cc0b84af5955244a444ecd3
parent94da82801334a586aa1581a8e5b8591aa90d8e94 (diff)
Modernise code and use smart pointers and favor std containers over homegrown specialized classes.
-rw-r--r--slobrok/src/vespa/slobrok/server/rpc_server_map.h3
-rw-r--r--slobrok/src/vespa/slobrok/server/visible_map.cpp50
-rw-r--r--slobrok/src/vespa/slobrok/server/visible_map.h15
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;