summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--juniper/src/vespa/juniper/stringmap.cpp1
-rw-r--r--metrics/src/vespa/metrics/loadmetric.hpp7
-rw-r--r--metrics/src/vespa/metrics/memoryconsumption.cpp3
-rw-r--r--metrics/src/vespa/metrics/metricmanager.cpp5
-rw-r--r--searchcommon/src/vespa/searchcommon/common/schema.cpp20
-rw-r--r--searchcommon/src/vespa/searchcommon/common/schema.h19
-rw-r--r--searchlib/src/vespa/searchlib/fef/properties.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/util/stringenum.cpp52
-rw-r--r--searchlib/src/vespa/searchlib/util/stringenum.h53
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp14
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h6
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp9
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/resultclass.h6
-rw-r--r--vespalib/src/tests/stllike/hash_test.cpp6
-rw-r--r--vespalib/src/vespa/vespalib/stllike/hash_fun.h14
-rw-r--r--vespalib/src/vespa/vespalib/stllike/hash_map.h19
-rw-r--r--vespalib/src/vespa/vespalib/stllike/hash_set.h8
17 files changed, 147 insertions, 97 deletions
diff --git a/juniper/src/vespa/juniper/stringmap.cpp b/juniper/src/vespa/juniper/stringmap.cpp
index 13d7bdee980..a65350432fd 100644
--- a/juniper/src/vespa/juniper/stringmap.cpp
+++ b/juniper/src/vespa/juniper/stringmap.cpp
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "stringmap.h"
+#include <vespa/vespalib/stllike/hashtable.hpp>
void Fast_StringMap::Insert(const char* key, const char* value)
{
diff --git a/metrics/src/vespa/metrics/loadmetric.hpp b/metrics/src/vespa/metrics/loadmetric.hpp
index ce93c761a05..65098662e04 100644
--- a/metrics/src/vespa/metrics/loadmetric.hpp
+++ b/metrics/src/vespa/metrics/loadmetric.hpp
@@ -55,7 +55,7 @@ LoadMetric<MetricType>::LoadMetric(const LoadMetric<MetricType>& other, MetricSe
}
template<typename MetricType>
-LoadMetric<MetricType>::~LoadMetric() { }
+LoadMetric<MetricType>::~LoadMetric() = default;
template<typename MetricType>
MetricSet*
@@ -74,10 +74,9 @@ MetricType&
LoadMetric<MetricType>::getMetric(const LoadType& type) {
MetricType* metric;
- typename vespalib::hash_map<uint32_t, MetricTypeUP>::iterator it(
- _metrics.find(type.getId()));
+ auto it = _metrics.find(type.getId());
if (it == _metrics.end()) {
- it = _metrics.find(0);
+ it = _metrics.find(0u);
assert(it != _metrics.end()); // Default should always exist
}
metric = it->second.get();
diff --git a/metrics/src/vespa/metrics/memoryconsumption.cpp b/metrics/src/vespa/metrics/memoryconsumption.cpp
index 0e69defa558..5a3280c20ab 100644
--- a/metrics/src/vespa/metrics/memoryconsumption.cpp
+++ b/metrics/src/vespa/metrics/memoryconsumption.cpp
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "memoryconsumption.h"
#include <vespa/vespalib/stllike/hash_set.h>
+#include <vespa/vespalib/stllike/hashtable.hpp>
#include <sstream>
namespace metrics {
@@ -16,7 +17,7 @@ MemoryConsumption::MemoryConsumption()
_seenStrings->resize(1000);
}
-MemoryConsumption::~MemoryConsumption() { }
+MemoryConsumption::~MemoryConsumption() = default;
uint32_t
MemoryConsumption::getStringMemoryUsage(const std::string& s, uint32_t& uniqueCount) {
diff --git a/metrics/src/vespa/metrics/metricmanager.cpp b/metrics/src/vespa/metrics/metricmanager.cpp
index 5b716e2698f..7125446c168 100644
--- a/metrics/src/vespa/metrics/metricmanager.cpp
+++ b/metrics/src/vespa/metrics/metricmanager.cpp
@@ -13,6 +13,7 @@
#include <vespa/vespalib/util/stringfmt.h>
#include <vespa/vespalib/util/exceptions.h>
#include <vespa/vespalib/stllike/asciistream.h>
+#include <vespa/vespalib/stllike/hashtable.hpp>
#include <sstream>
#include <algorithm>
@@ -23,8 +24,8 @@ namespace metrics {
typedef MetricsmanagerConfig Config;
-MetricManager::ConsumerSpec::ConsumerSpec() : includedMetrics() { }
-MetricManager::ConsumerSpec::~ConsumerSpec() { }
+MetricManager::ConsumerSpec::ConsumerSpec() = default;
+MetricManager::ConsumerSpec::~ConsumerSpec() = default;
void
MetricManager::assertMetricLockLocked(const MetricLockGuard& g) const {
diff --git a/searchcommon/src/vespa/searchcommon/common/schema.cpp b/searchcommon/src/vespa/searchcommon/common/schema.cpp
index 5e9db03bf31..cef74409024 100644
--- a/searchcommon/src/vespa/searchcommon/common/schema.cpp
+++ b/searchcommon/src/vespa/searchcommon/common/schema.cpp
@@ -4,6 +4,7 @@
#include <fstream>
#include <vespa/config/common/configparser.h>
#include <vespa/vespalib/stllike/asciistream.h>
+#include <vespa/vespalib/stllike/hashtable.hpp>
#include <vespa/fastos/file.h>
#include <vespa/log/log.h>
@@ -421,6 +422,25 @@ Schema::getFieldSetId(vespalib::stringref name) const
return getFieldId(name, _fieldSetIds);
}
+bool
+Schema::isIndexField(vespalib::stringref name) const
+{
+ return _indexIds.find(name) != _indexIds.end();
+}
+
+bool
+Schema::isSummaryField(vespalib::stringref name) const
+{
+ return _summaryIds.find(name) != _summaryIds.end();
+}
+
+bool
+Schema::isAttributeField(vespalib::stringref name) const
+{
+ return _attributeIds.find(name) != _attributeIds.end();
+}
+
+
void
Schema::swap(Schema &rhs)
{
diff --git a/searchcommon/src/vespa/searchcommon/common/schema.h b/searchcommon/src/vespa/searchcommon/common/schema.h
index d066ccb0a27..f8020d6ed9a 100644
--- a/searchcommon/src/vespa/searchcommon/common/schema.h
+++ b/searchcommon/src/vespa/searchcommon/common/schema.h
@@ -293,11 +293,7 @@ public:
* @return true if field is an index field.
* @param name the name of the field.
**/
- bool
- isIndexField(vespalib::stringref name) const
- {
- return _indexIds.find(name) != _indexIds.end();
- }
+ bool isIndexField(vespalib::stringref name) const;
/**
* Check if a field is a summary field
@@ -305,22 +301,15 @@ public:
* @return true if field is an summary field.
* @param name the name of the field.
**/
- bool
- isSummaryField(vespalib::stringref name) const
- {
- return _summaryIds.find(name) != _summaryIds.end();
- }
+ bool isSummaryField(vespalib::stringref name) const;
+
/**
* Check if a field is a attribute field
*
* @return true if field is an attribute field.
* @param name the name of the field.
**/
- bool
- isAttributeField(vespalib::stringref name) const
- {
- return _attributeIds.find(name) != _attributeIds.end();
- }
+ bool isAttributeField(vespalib::stringref name) const;
/**
* Get information about a specific attribute field using the given fieldId.
diff --git a/searchlib/src/vespa/searchlib/fef/properties.cpp b/searchlib/src/vespa/searchlib/fef/properties.cpp
index 95b74cd5dfd..dc4dcce8865 100644
--- a/searchlib/src/vespa/searchlib/fef/properties.cpp
+++ b/searchlib/src/vespa/searchlib/fef/properties.cpp
@@ -209,7 +209,7 @@ Properties::lookup(vespalib::stringref key) const
if (key.empty()) {
return Property();
}
- Map::const_iterator node = _data.find(key);
+ Map::const_iterator node = _data.find<vespalib::stringref>(key);
if (node == _data.end()) {
return Property();
}
diff --git a/searchlib/src/vespa/searchlib/util/stringenum.cpp b/searchlib/src/vespa/searchlib/util/stringenum.cpp
index 60238c32cc6..efcf33e73ab 100644
--- a/searchlib/src/vespa/searchlib/util/stringenum.cpp
+++ b/searchlib/src/vespa/searchlib/util/stringenum.cpp
@@ -2,13 +2,13 @@
#include "stringenum.h"
#include <vespa/fastlib/io/bufferedfile.h>
+#include <vespa/vespalib/stllike/hashtable.hpp>
#include <cassert>
#include <vespa/log/log.h>
LOG_SETUP(".seachlib.util.stringenum");
-namespace search {
-namespace util {
+namespace search::util {
static inline char *
StripString(char *str)
@@ -32,7 +32,14 @@ StripString(char *str)
return first;
}
-StringEnum::~StringEnum() { }
+StringEnum::StringEnum()
+ : _numEntries(0),
+ _mapping(),
+ _reverseMap()
+{
+}
+
+StringEnum::~StringEnum() = default;
void
StringEnum::CreateReverseMapping() const
@@ -123,5 +130,44 @@ StringEnum::Load(const char *filename)
return true;
}
+void
+StringEnum::Clear()
+{
+ _reverseMap.clear();
+ _mapping.clear();
+ _numEntries = 0;
+}
+
+int
+StringEnum::Add(const char *str)
+{
+ Map::const_iterator found(_mapping.find(str));
+ if (found != _mapping.end()) {
+ return found->second;
+ } else {
+ int value = _numEntries++;
+ _mapping[str] = value;
+ return value;
+ }
}
+
+int
+StringEnum::Lookup(const char *str) const
+{
+ Map::const_iterator found(_mapping.find(str));
+ return (found != _mapping.end()) ? found->second : -1;
+}
+
+const char *
+StringEnum::Lookup(uint32_t value) const
+{
+ if (value >= _numEntries)
+ return NULL;
+
+ if (_numEntries > _reverseMap.size())
+ CreateReverseMapping();
+
+ return _reverseMap[value];
+}
+
}
diff --git a/searchlib/src/vespa/searchlib/util/stringenum.h b/searchlib/src/vespa/searchlib/util/stringenum.h
index 44b3afca539..bd234ba2e36 100644
--- a/searchlib/src/vespa/searchlib/util/stringenum.h
+++ b/searchlib/src/vespa/searchlib/util/stringenum.h
@@ -5,8 +5,7 @@
#include <vector>
#include <vespa/vespalib/stllike/hash_map.h>
-namespace search {
-namespace util {
+namespace search::util {
/**
* An object of this class represents an enumeration of a set of
@@ -35,29 +34,17 @@ public:
/**
* Create an empty string enumeration.
**/
- StringEnum()
- : _numEntries(0),
- _mapping(),
- _reverseMap()
- {
- }
+ StringEnum();
/**
* Destructor.
**/
~StringEnum();
-
/**
* Discard all entries held by this object.
**/
- void Clear()
- {
- _reverseMap.clear();
- _mapping.clear();
- _numEntries = 0;
- }
-
+ void Clear();
/**
* Add a string to this enumeration. Equal strings will get the same
@@ -68,18 +55,7 @@ public:
* @return the enumerated value for the given string.
* @param str string you want to add.
**/
- int Add(const char *str)
- {
- Map::const_iterator found(_mapping.find(str));
- if (found != _mapping.end()) {
- return found->second;
- } else {
- int value = _numEntries++;
- _mapping[str] = value;
- return value;
- }
- }
-
+ int Add(const char *str);
/**
* Obtain the enumerated value for the given string.
@@ -87,12 +63,7 @@ public:
* @return enumerated value or -1 if not present.
* @param str the string to look up.
**/
- int Lookup(const char *str) const
- {
- Map::const_iterator found(_mapping.find(str));
- return (found != _mapping.end()) ? found->second : -1;
- }
-
+ int Lookup(const char *str) const;
/**
* Obtain the string for the given enumerated value.
@@ -100,17 +71,7 @@ public:
* @return string or NULL if out of range.
* @param value the enumerated value to look up.
**/
- const char *Lookup(uint32_t value) const
- {
- if (value >= _numEntries)
- return NULL;
-
- if (_numEntries > _reverseMap.size())
- CreateReverseMapping();
-
- return _reverseMap[value];
- }
-
+ const char *Lookup(uint32_t value) const;
/**
* Obtain the number of entries currently present in this
@@ -141,5 +102,3 @@ public:
};
}
-}
-
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp
index d75ca47dd33..79266d34585 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.cpp
@@ -4,6 +4,7 @@
#include "keywordextractor.h"
#include "idocsumenvironment.h"
#include <vespa/searchlib/parsequery/stackdumpiterator.h>
+#include <vespa/vespalib/stllike/hashtable.hpp>
/** Tell us what parts of the query we are interested in */
@@ -12,12 +13,7 @@ namespace search::docsummary {
bool useful(search::ParseItem::ItemCreator creator)
{
- switch (creator) {
- case search::ParseItem::CREA_ORIG:
- return true;
- default:
- return false;
- }
+ return creator == search::ParseItem::CREA_ORIG;
}
@@ -38,6 +34,12 @@ KeywordExtractor::~KeywordExtractor()
}
}
+bool
+KeywordExtractor::IsLegalIndexName(const char *idxName) const
+{
+ return _legalIndexes.find(idxName) != _legalIndexes.end();
+}
+
KeywordExtractor::IndexPrefix::IndexPrefix(const char *prefix, IndexPrefix **list)
: _prefix(NULL),
_prefixLen(0),
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h
index 6c9ed675225..cfc73d606a0 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/keywordextractor.h
@@ -51,11 +51,7 @@ private:
return false;
}
- bool IsLegalIndexName(const char *idxName) const
- {
- return _legalIndexes.find(idxName) != _legalIndexes.end();
- }
-
+ bool IsLegalIndexName(const char *idxName) const;
public:
explicit KeywordExtractor(IDocsumEnvironment * env);
~KeywordExtractor();
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp
index 507ec7b3866..8066a5e65db 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp
@@ -2,6 +2,7 @@
#include "resultclass.h"
#include "resultconfig.h"
+#include <vespa/vespalib/stllike/hashtable.hpp>
#include <cassert>
#include <zlib.h>
@@ -18,8 +19,14 @@ ResultClass::ResultClass(const char *name, uint32_t id, util::StringEnum & field
{ }
-ResultClass::~ResultClass() { }
+ResultClass::~ResultClass() = default;
+int
+ResultClass::GetIndexFromName(const char* name) const
+{
+ NameIdMap::const_iterator found(_nameMap.find(name));
+ return (found != _nameMap.end()) ? found->second : -1;
+}
bool
ResultClass::AddConfigEntry(const char *name, ResType type)
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h
index d1504ed5bdd..e7c7c799b5f 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h
@@ -245,11 +245,7 @@ public:
*
* @return field index or -1 if not found.
**/
- int GetIndexFromName(const char* name) const
- {
- NameIdMap::const_iterator found(_nameMap.find(name));
- return (found != _nameMap.end()) ? found->second : -1;
- }
+ int GetIndexFromName(const char* name) const;
/**
diff --git a/vespalib/src/tests/stllike/hash_test.cpp b/vespalib/src/tests/stllike/hash_test.cpp
index e7fe729c1ba..4feeaef8349 100644
--- a/vespalib/src/tests/stllike/hash_test.cpp
+++ b/vespalib/src/tests/stllike/hash_test.cpp
@@ -154,14 +154,14 @@ TEST("test hash set with simple type")
TEST("test hash map iterator stability")
{
- hash_map<int, int> h;
+ hash_map<uint32_t, uint32_t> h;
EXPECT_EQUAL(1ul, h.capacity());
for (size_t i(0); i < 100; i++) {
EXPECT_TRUE(h.find(i) == h.end());
h[i] = i;
EXPECT_TRUE(h.find(i) != h.end());
- int * p1 = & h.find(i)->second;
- int * p2 = & h[i];
+ uint32_t * p1 = & h.find(i)->second;
+ uint32_t * p2 = & h[i];
EXPECT_EQUAL(p1, p2);
}
EXPECT_EQUAL(128ul, h.capacity());
diff --git a/vespalib/src/vespa/vespalib/stllike/hash_fun.h b/vespalib/src/vespa/vespalib/stllike/hash_fun.h
index f708f49081e..de849b8924e 100644
--- a/vespalib/src/vespa/vespalib/stllike/hash_fun.h
+++ b/vespalib/src/vespa/vespalib/stllike/hash_fun.h
@@ -6,6 +6,20 @@
namespace vespalib {
+template<typename T, typename F>
+struct cast_static {
+ T operator() (const F & o) const {
+ return static_cast<T>(o);
+ }
+};
+
+template<typename L, typename R>
+struct equal_to : public std::binary_function<L, R, bool>
+{
+ bool operator()(const L & __x, const R & __y) const { return __x == __y; }
+ bool operator()(const R & __x, const L & __y) const { return __x == __y; }
+};
+
template<typename K> struct hash {
// specializations operate as functor for known key types
size_t operator() (const K & v) const {
diff --git a/vespalib/src/vespa/vespalib/stllike/hash_map.h b/vespalib/src/vespa/vespalib/stllike/hash_map.h
index 6d6498f8e78..929a3740a1d 100644
--- a/vespalib/src/vespa/vespalib/stllike/hash_map.h
+++ b/vespalib/src/vespa/vespalib/stllike/hash_map.h
@@ -50,6 +50,25 @@ public:
void erase(const_iterator it) { return erase(it->first); }
iterator find(const K & key) { return _ht.find(key); }
const_iterator find(const K & key) const { return _ht.find(key); }
+
+ template< typename AltKey, typename AltExtract=std::_Identity<K>, typename AltHash=vespalib::hash<AltKey>, typename AltEqual=equal_to<AltKey, K> >
+ const_iterator find(const AltKey & key) const {
+ return _ht.template find<AltKey, AltExtract, AltHash, AltEqual>(key);
+ }
+ template< typename AltKey, typename AltExtract=std::_Identity<K>, typename AltHash=vespalib::hash<AltKey>, typename AltEqual=equal_to<AltKey, K> >
+ iterator find(const AltKey & key) {
+ return _ht.template find<AltKey, AltExtract, AltHash, AltEqual>(key);
+ }
+ template< typename AltKey, typename AltExtract, typename AltHash=vespalib::hash<AltKey>, typename AltEqual=equal_to<AltKey, K> >
+ const_iterator find(const AltKey & key, const AltExtract & altExtract) const {
+ return _ht.template find<AltKey, AltExtract, AltHash, AltEqual>(key, altExtract);
+ }
+
+ template< typename AltKey, typename AltExtract, typename AltHash=vespalib::hash<AltKey>, typename AltEqual=equal_to<AltKey, K> >
+ iterator find(const AltKey & key, const AltExtract & altExtract) {
+ return _ht.template find<AltKey, AltExtract, AltHash, AltEqual>(key, altExtract);
+ }
+
void clear();
void resize(size_t newSize);
void swap(hash_map & rhs);
diff --git a/vespalib/src/vespa/vespalib/stllike/hash_set.h b/vespalib/src/vespa/vespalib/stllike/hash_set.h
index c4ccc662787..9756a3083df 100644
--- a/vespalib/src/vespa/vespalib/stllike/hash_set.h
+++ b/vespalib/src/vespa/vespalib/stllike/hash_set.h
@@ -48,18 +48,18 @@ public:
template <typename Func>
void for_each(Func func) const { _ht.for_each(func); }
- template< typename AltKey, typename AltExtract, typename AltHash, typename AltEqual >
+ template< typename AltKey, typename AltExtract=std::_Identity<K>, typename AltHash=vespalib::hash<AltKey>, typename AltEqual=equal_to<AltKey, K> >
const_iterator find(const AltKey & key) const { return _ht.template find<AltKey, AltExtract, AltHash, AltEqual>(key); }
- template< typename AltKey, typename AltExtract, typename AltHash, typename AltEqual >
+ template< typename AltKey, typename AltExtract=std::_Identity<K>, typename AltHash=vespalib::hash<AltKey>, typename AltEqual=equal_to<AltKey, K> >
iterator find(const AltKey & key) { return _ht.template find<AltKey, AltExtract, AltHash, AltEqual>(key); }
- template< typename AltKey, typename AltExtract, typename AltHash, typename AltEqual >
+ template< typename AltKey, typename AltExtract, typename AltHash=vespalib::hash<AltKey>, typename AltEqual=equal_to<AltKey, K> >
const_iterator find(const AltKey & key, const AltExtract & altExtract) const {
return _ht.template find<AltKey, AltExtract, AltHash, AltEqual>(key, altExtract);
}
- template< typename AltKey, typename AltExtract, typename AltHash, typename AltEqual >
+ template< typename AltKey, typename AltExtract, typename AltHash=vespalib::hash<AltKey>, typename AltEqual=equal_to<AltKey, K> >
iterator find(const AltKey & key, const AltExtract & altExtract) {
return _ht.template find<AltKey, AltExtract, AltHash, AltEqual>(key, altExtract);
}