summaryrefslogtreecommitdiffstats
path: root/searchsummary
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-08-18 12:22:30 +0200
committerTor Egge <Tor.Egge@online.no>2022-08-18 12:22:30 +0200
commit1ce79b8d4316f026af53d715c69694159cd4d8bf (patch)
tree74b613fb77399a0c781346da0d9821f8408357a1 /searchsummary
parentc6d747e7f832bd24b21216af6437bb76f62c51ef (diff)
Use std::unique_ptr to simplify memory management.
Diffstat (limited to 'searchsummary')
-rw-r--r--searchsummary/src/vespa/juniper/Matcher.cpp8
-rw-r--r--searchsummary/src/vespa/juniper/foreach_utils.h44
-rw-r--r--searchsummary/src/vespa/juniper/juniperdebug.h8
-rw-r--r--searchsummary/src/vespa/juniper/keyocc.h4
-rw-r--r--searchsummary/src/vespa/juniper/querymodifier.cpp1
-rw-r--r--searchsummary/src/vespa/juniper/result.cpp26
-rw-r--r--searchsummary/src/vespa/juniper/result.h2
-rw-r--r--searchsummary/src/vespa/juniper/rpinterface.cpp1
8 files changed, 22 insertions, 72 deletions
diff --git a/searchsummary/src/vespa/juniper/Matcher.cpp b/searchsummary/src/vespa/juniper/Matcher.cpp
index d580faae927..32f966f4571 100644
--- a/searchsummary/src/vespa/juniper/Matcher.cpp
+++ b/searchsummary/src/vespa/juniper/Matcher.cpp
@@ -125,7 +125,6 @@ void Matcher::reset_matches()
void Matcher::reset_occurrences()
{
- delete_all(_occ);
_occ.clear();
}
@@ -162,10 +161,11 @@ bool Matcher::add_occurrence(off_t pos, off_t tpos, size_t len)
LOG(spam, "Match: %s(%" PRId64 ")", mexp->term(), static_cast<int64_t>(tpos));
// Add new occurrence to sequence of all occurrences
- key_occ_ptr k = new key_occ(mexp->term(), pos, tpos, len);
- if (!k) return false;
+ auto smart_k = std::make_unique<key_occ>(mexp->term(), pos, tpos, len);
+ if (!smart_k) return false;
- _occ.push_back(k);
+ auto k = smart_k.get();
+ _occ.emplace_back(std::move(smart_k));
if (!(_need_complete_cnt > 0)) {
size_t nodeno;
diff --git a/searchsummary/src/vespa/juniper/foreach_utils.h b/searchsummary/src/vespa/juniper/foreach_utils.h
deleted file mode 100644
index ebbf1f41049..00000000000
--- a/searchsummary/src/vespa/juniper/foreach_utils.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#pragma once
-#include <algorithm>
-
-/** \if utils
- * A simple general deleter object to be passed to for instance std::for_each
- * to delete pointer referenced objects
- * in STL containers.
- *
- */
-
-struct Deleter
-{
- template <typename T>
- void operator()(T* t) const
- {
- delete t;
- }
-};
-
-/* \def Handy macro to delete all pointer objects in a container
- * (using \a Deleter)
- */
-
-#define delete_all(container) \
- std::for_each(container.begin(), container.end(), Deleter())
-
-
-#define FunctionObj(name, func) \
- struct name \
- { \
- template <typename T> \
- void operator()(T* t) \
- { \
- t->func(); \
- } \
- }
-
-
-#define for_all(container, obj) \
- std::for_each(container.begin(), container.end(), obj())
-
-/** \endif (utils) */
-
diff --git a/searchsummary/src/vespa/juniper/juniperdebug.h b/searchsummary/src/vespa/juniper/juniperdebug.h
index cf6a3c971f8..d475134dae3 100644
--- a/searchsummary/src/vespa/juniper/juniperdebug.h
+++ b/searchsummary/src/vespa/juniper/juniperdebug.h
@@ -3,6 +3,7 @@
// Include something from STL so that _STLPORT_VERSION gets defined if appropriate
#include <string>
+#include <algorithm>
/* Juniper debug macro */
@@ -43,14 +44,9 @@ extern unsigned debug_level;
#endif
-
-#include "foreach_utils.h"
-
-FunctionObj(DoDump, dump);
-
template <class _container>
void dump_list(_container& __c)
{
- for_all(__c, DoDump);
+ std::for_each(__c.begin(), __c.end(), [](auto& elem) { elem->dump(); });
}
diff --git a/searchsummary/src/vespa/juniper/keyocc.h b/searchsummary/src/vespa/juniper/keyocc.h
index 8c79e51e3a3..f211b5bdf61 100644
--- a/searchsummary/src/vespa/juniper/keyocc.h
+++ b/searchsummary/src/vespa/juniper/keyocc.h
@@ -3,9 +3,9 @@
#include "matchelem.h"
#include "querynode.h"
+#include <memory>
-typedef key_occ* key_occ_ptr;
-typedef std::vector<key_occ_ptr> key_occ_vector;
+using key_occ_vector = std::vector<std::unique_ptr<key_occ>>;
class key_occ : public MatchElement
{
diff --git a/searchsummary/src/vespa/juniper/querymodifier.cpp b/searchsummary/src/vespa/juniper/querymodifier.cpp
index 797617b605a..da751c52a92 100644
--- a/searchsummary/src/vespa/juniper/querymodifier.cpp
+++ b/searchsummary/src/vespa/juniper/querymodifier.cpp
@@ -2,7 +2,6 @@
#include "juniperdebug.h"
#include "querymodifier.h"
-#include "foreach_utils.h"
#include "querynode.h"
#include <vespa/log/log.h>
diff --git a/searchsummary/src/vespa/juniper/result.cpp b/searchsummary/src/vespa/juniper/result.cpp
index 18d91fcae8e..fddc5d65c86 100644
--- a/searchsummary/src/vespa/juniper/result.cpp
+++ b/searchsummary/src/vespa/juniper/result.cpp
@@ -98,7 +98,6 @@ Result::Result(const Config& config, QueryHandle& qhandle,
Result::~Result()
{
- delete_all(_summaries);
}
@@ -121,7 +120,7 @@ Summary* Result::GetTeaser(const Config* alt_config)
_dynsum_len = dsp.Length();
else
_dynsum_len = _qhandle->_dynsum_len;
- SummaryImpl *sum = NULL;
+ std::unique_ptr<SummaryImpl> sum;
// Avoid overhead when being called with an empty stack
if (_mo && _mo->Query()) {
Scan();
@@ -139,13 +138,13 @@ Summary* Result::GetTeaser(const Config* alt_config)
if (sdesc) {
size_t char_size;
- sum = new SummaryImpl(BuildSummary(_docsum, _docsum_len, sdesc, cfg->_sumconf, char_size));
+ sum = std::make_unique<SummaryImpl>(BuildSummary(_docsum, _docsum_len, sdesc, cfg->_sumconf, char_size));
DeleteSummaryDesc(sdesc);
}
}
- if (sum == NULL) {
- sum = new SummaryImpl();
+ if (!sum) {
+ sum = std::make_unique<SummaryImpl>();
}
if (sum->_text.empty() && dsp.Fallback() == DocsumParams::FALLBACK_PREFIX)
@@ -186,25 +185,26 @@ Summary* Result::GetTeaser(const Config* alt_config)
}
sum->_text = std::string(&text[0], text.size());
}
- _summaries.push_back(sum);
- return sum;
+ _summaries.emplace_back(std::move(sum));
+ return _summaries.back().get();
}
Summary* Result::GetLog()
{
// Avoid overhead when being called with an empty stack
- Summary* sum = NULL;
+ std::unique_ptr<Summary> sum;
if (_mo && _mo->Query())
{
LOG(debug, "juniper::GetLog");
Scan();
- sum = new SummaryImpl(_matcher->GetLog());
+ sum = std::make_unique<SummaryImpl>(_matcher->GetLog());
}
- else
- sum = new SummaryImpl();
- _summaries.push_back(sum);
- return sum;
+ else {
+ sum = std::make_unique<SummaryImpl>();
+ }
+ _summaries.emplace_back(std::move(sum));
+ return _summaries.back().get();
}
diff --git a/searchsummary/src/vespa/juniper/result.h b/searchsummary/src/vespa/juniper/result.h
index 015291cb4ef..dcbb89fb1dc 100644
--- a/searchsummary/src/vespa/juniper/result.h
+++ b/searchsummary/src/vespa/juniper/result.h
@@ -47,7 +47,7 @@ public:
std::unique_ptr<SpecialTokenRegistry> _registry;
std::unique_ptr<JuniperTokenizer> _tokenizer;
private:
- std::vector<Summary*> _summaries; // Active summaries for this result
+ std::vector<std::unique_ptr<Summary>> _summaries; // Active summaries for this result
bool _scan_done; // State of the result - is text scan done?
/* Option storage */
diff --git a/searchsummary/src/vespa/juniper/rpinterface.cpp b/searchsummary/src/vespa/juniper/rpinterface.cpp
index 32ea7759170..de4b4cd3ef0 100644
--- a/searchsummary/src/vespa/juniper/rpinterface.cpp
+++ b/searchsummary/src/vespa/juniper/rpinterface.cpp
@@ -2,7 +2,6 @@
#include "rpinterface.h"
#include "juniperparams.h"
-#include "foreach_utils.h"
#include "queryvisitor.h"
#include "queryhandle.h"
#include "propreader.h"