diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-08-18 12:22:30 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-08-18 12:22:30 +0200 |
commit | 1ce79b8d4316f026af53d715c69694159cd4d8bf (patch) | |
tree | 74b613fb77399a0c781346da0d9821f8408357a1 /searchsummary/src | |
parent | c6d747e7f832bd24b21216af6437bb76f62c51ef (diff) |
Use std::unique_ptr to simplify memory management.
Diffstat (limited to 'searchsummary/src')
-rw-r--r-- | searchsummary/src/vespa/juniper/Matcher.cpp | 8 | ||||
-rw-r--r-- | searchsummary/src/vespa/juniper/foreach_utils.h | 44 | ||||
-rw-r--r-- | searchsummary/src/vespa/juniper/juniperdebug.h | 8 | ||||
-rw-r--r-- | searchsummary/src/vespa/juniper/keyocc.h | 4 | ||||
-rw-r--r-- | searchsummary/src/vespa/juniper/querymodifier.cpp | 1 | ||||
-rw-r--r-- | searchsummary/src/vespa/juniper/result.cpp | 26 | ||||
-rw-r--r-- | searchsummary/src/vespa/juniper/result.h | 2 | ||||
-rw-r--r-- | searchsummary/src/vespa/juniper/rpinterface.cpp | 1 |
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" |