aboutsummaryrefslogtreecommitdiffstats
path: root/vsm
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2019-10-23 12:20:37 +0200
committerTor Egge <Tor.Egge@broadpark.no>2019-10-23 12:20:37 +0200
commit54d302f21a82c3b8a3e8c286c20c4b577cfe8a0a (patch)
treec13cacec88d322512f5207c52437f0669531127d /vsm
parent29b1475210960916b2e11d67345fba57f13096cf (diff)
Use std::unique_ptr<vsm::FieldSearcher> to store field searhers.
Diffstat (limited to 'vsm')
-rw-r--r--vsm/src/vespa/vsm/searcher/boolfieldsearcher.cpp6
-rw-r--r--vsm/src/vespa/vsm/searcher/boolfieldsearcher.h2
-rw-r--r--vsm/src/vespa/vsm/searcher/fieldsearcher.cpp1
-rw-r--r--vsm/src/vespa/vsm/searcher/fieldsearcher.h7
-rw-r--r--vsm/src/vespa/vsm/searcher/floatfieldsearcher.cpp13
-rw-r--r--vsm/src/vespa/vsm/searcher/floatfieldsearcher.h4
-rw-r--r--vsm/src/vespa/vsm/searcher/futf8strchrfieldsearcher.cpp6
-rw-r--r--vsm/src/vespa/vsm/searcher/futf8strchrfieldsearcher.h2
-rw-r--r--vsm/src/vespa/vsm/searcher/intfieldsearcher.cpp6
-rw-r--r--vsm/src/vespa/vsm/searcher/intfieldsearcher.h2
-rw-r--r--vsm/src/vespa/vsm/searcher/utf8exactstringfieldsearcher.cpp6
-rw-r--r--vsm/src/vespa/vsm/searcher/utf8exactstringfieldsearcher.h2
-rw-r--r--vsm/src/vespa/vsm/searcher/utf8flexiblestringfieldsearcher.cpp6
-rw-r--r--vsm/src/vespa/vsm/searcher/utf8flexiblestringfieldsearcher.h2
-rw-r--r--vsm/src/vespa/vsm/searcher/utf8strchrfieldsearcher.cpp6
-rw-r--r--vsm/src/vespa/vsm/searcher/utf8strchrfieldsearcher.h2
-rw-r--r--vsm/src/vespa/vsm/searcher/utf8substringsearcher.cpp6
-rw-r--r--vsm/src/vespa/vsm/searcher/utf8substringsearcher.h2
-rw-r--r--vsm/src/vespa/vsm/searcher/utf8substringsnippetmodifier.cpp6
-rw-r--r--vsm/src/vespa/vsm/searcher/utf8substringsnippetmodifier.h2
-rw-r--r--vsm/src/vespa/vsm/searcher/utf8suffixstringfieldsearcher.cpp6
-rw-r--r--vsm/src/vespa/vsm/searcher/utf8suffixstringfieldsearcher.h2
-rw-r--r--vsm/src/vespa/vsm/vsm/fieldsearchspec.cpp33
-rw-r--r--vsm/src/vespa/vsm/vsm/fieldsearchspec.h3
24 files changed, 91 insertions, 42 deletions
diff --git a/vsm/src/vespa/vsm/searcher/boolfieldsearcher.cpp b/vsm/src/vespa/vsm/searcher/boolfieldsearcher.cpp
index bf40a679bab..a9f765546a8 100644
--- a/vsm/src/vespa/vsm/searcher/boolfieldsearcher.cpp
+++ b/vsm/src/vespa/vsm/searcher/boolfieldsearcher.cpp
@@ -12,7 +12,11 @@ vespalib::stringref TRUE = "true";
vespalib::stringref FALSE = "false";
}
-IMPLEMENT_DUPLICATE(BoolFieldSearcher);
+std::unique_ptr<FieldSearcher>
+BoolFieldSearcher::duplicate() const
+{
+ return std::make_unique<BoolFieldSearcher>(*this);
+}
BoolFieldSearcher::BoolFieldSearcher(FieldIdT fId) :
FieldSearcher(fId),
diff --git a/vsm/src/vespa/vsm/searcher/boolfieldsearcher.h b/vsm/src/vespa/vsm/searcher/boolfieldsearcher.h
index 139645bf0ba..b7f9419465d 100644
--- a/vsm/src/vespa/vsm/searcher/boolfieldsearcher.h
+++ b/vsm/src/vespa/vsm/searcher/boolfieldsearcher.h
@@ -8,7 +8,7 @@ namespace vsm {
class BoolFieldSearcher : public FieldSearcher
{
public:
- DUPLICATE(BoolFieldSearcher);
+ std::unique_ptr<FieldSearcher> duplicate() const override;
BoolFieldSearcher(FieldIdT fId);
~BoolFieldSearcher();
void prepare(search::QueryTermList & qtl, const SharedSearcherBuf & buf) override;
diff --git a/vsm/src/vespa/vsm/searcher/fieldsearcher.cpp b/vsm/src/vespa/vsm/searcher/fieldsearcher.cpp
index 2ba5fea3153..4bb36d3f968 100644
--- a/vsm/src/vespa/vsm/searcher/fieldsearcher.cpp
+++ b/vsm/src/vespa/vsm/searcher/fieldsearcher.cpp
@@ -69,7 +69,6 @@ void FieldSearcherBase::prepare(const QueryTermList & qtl)
FieldSearcher::FieldSearcher(const FieldIdT & fId, bool defaultPrefix) :
FieldSearcherBase(),
- Object(),
_field(fId),
_matchType(defaultPrefix ? PREFIX : REGULAR),
_maxFieldLength(0x100000),
diff --git a/vsm/src/vespa/vsm/searcher/fieldsearcher.h b/vsm/src/vespa/vsm/searcher/fieldsearcher.h
index 2bf976de017..8bfb5a3af31 100644
--- a/vsm/src/vespa/vsm/searcher/fieldsearcher.h
+++ b/vsm/src/vespa/vsm/searcher/fieldsearcher.h
@@ -38,7 +38,7 @@ protected:
search::v16qi *_qtlFast;
};
-class FieldSearcher : public FieldSearcherBase, public search::Object
+class FieldSearcher : public FieldSearcherBase
{
public:
enum MatchType {
@@ -50,7 +50,8 @@ public:
};
FieldSearcher(const FieldIdT & fId, bool defaultPrefix=false);
- ~FieldSearcher();
+ ~FieldSearcher() override;
+ virtual std::unique_ptr<FieldSearcher> duplicate() const = 0;
bool search(const StorageDocument & doc);
virtual void prepare(search::QueryTermList & qtl, const SharedSearcherBuf & buf);
const FieldIdT & field() const { return _field; }
@@ -133,7 +134,7 @@ public:
static search::byte _wordChar[256];
};
-typedef search::ObjectContainer<FieldSearcher> FieldSearcherContainer;
+typedef std::unique_ptr<FieldSearcher> FieldSearcherContainer;
typedef std::vector<FieldSearcherContainer> FieldIdTSearcherMapT;
class FieldIdTSearcherMap : public FieldIdTSearcherMapT
diff --git a/vsm/src/vespa/vsm/searcher/floatfieldsearcher.cpp b/vsm/src/vespa/vsm/searcher/floatfieldsearcher.cpp
index 0f31c6420be..41a07a03bf2 100644
--- a/vsm/src/vespa/vsm/searcher/floatfieldsearcher.cpp
+++ b/vsm/src/vespa/vsm/searcher/floatfieldsearcher.cpp
@@ -7,8 +7,17 @@ using search::QueryTermList;
namespace vsm {
-IMPLEMENT_DUPLICATE(FloatFieldSearcher);
-IMPLEMENT_DUPLICATE(DoubleFieldSearcher);
+std::unique_ptr<FieldSearcher>
+FloatFieldSearcher::duplicate() const
+{
+ return std::make_unique<FloatFieldSearcher>(*this);
+}
+
+std::unique_ptr<FieldSearcher>
+DoubleFieldSearcher::duplicate() const
+{
+ return std::make_unique<DoubleFieldSearcher>(*this);
+}
template<typename T>
FloatFieldSearcherT<T>::FloatFieldSearcherT(FieldIdT fId) :
diff --git a/vsm/src/vespa/vsm/searcher/floatfieldsearcher.h b/vsm/src/vespa/vsm/searcher/floatfieldsearcher.h
index a589706ff39..5f56ff67b30 100644
--- a/vsm/src/vespa/vsm/searcher/floatfieldsearcher.h
+++ b/vsm/src/vespa/vsm/searcher/floatfieldsearcher.h
@@ -38,14 +38,14 @@ typedef FloatFieldSearcherT<double> FloatFieldSearcherTD;
class FloatFieldSearcher : public FloatFieldSearcherTF
{
public:
- DUPLICATE(FloatFieldSearcher);
+ std::unique_ptr<FieldSearcher> duplicate() const override;
FloatFieldSearcher(FieldIdT fId=0) : FloatFieldSearcherTF(fId) { }
};
class DoubleFieldSearcher : public FloatFieldSearcherTD
{
public:
- DUPLICATE(DoubleFieldSearcher);
+ std::unique_ptr<FieldSearcher> duplicate() const override;
DoubleFieldSearcher(FieldIdT fId=0) : FloatFieldSearcherTD(fId) { }
};
diff --git a/vsm/src/vespa/vsm/searcher/futf8strchrfieldsearcher.cpp b/vsm/src/vespa/vsm/searcher/futf8strchrfieldsearcher.cpp
index 335f6e81d23..e85cc20d418 100644
--- a/vsm/src/vespa/vsm/searcher/futf8strchrfieldsearcher.cpp
+++ b/vsm/src/vespa/vsm/searcher/futf8strchrfieldsearcher.cpp
@@ -10,7 +10,11 @@ using search::v16qi;
namespace vsm {
-IMPLEMENT_DUPLICATE(FUTF8StrChrFieldSearcher);
+std::unique_ptr<FieldSearcher>
+FUTF8StrChrFieldSearcher::duplicate() const
+{
+ return std::make_unique<FUTF8StrChrFieldSearcher>(*this);
+}
FUTF8StrChrFieldSearcher::FUTF8StrChrFieldSearcher()
: UTF8StrChrFieldSearcher(),
diff --git a/vsm/src/vespa/vsm/searcher/futf8strchrfieldsearcher.h b/vsm/src/vespa/vsm/searcher/futf8strchrfieldsearcher.h
index 265bca253d9..0539bdc6ea6 100644
--- a/vsm/src/vespa/vsm/searcher/futf8strchrfieldsearcher.h
+++ b/vsm/src/vespa/vsm/searcher/futf8strchrfieldsearcher.h
@@ -8,7 +8,7 @@ namespace vsm {
class FUTF8StrChrFieldSearcher : public UTF8StrChrFieldSearcher
{
public:
- DUPLICATE(FUTF8StrChrFieldSearcher);
+ std::unique_ptr<FieldSearcher> duplicate() const override;
FUTF8StrChrFieldSearcher();
FUTF8StrChrFieldSearcher(FieldIdT fId);
~FUTF8StrChrFieldSearcher();
diff --git a/vsm/src/vespa/vsm/searcher/intfieldsearcher.cpp b/vsm/src/vespa/vsm/searcher/intfieldsearcher.cpp
index 30d9992e2d4..5886a17cf4a 100644
--- a/vsm/src/vespa/vsm/searcher/intfieldsearcher.cpp
+++ b/vsm/src/vespa/vsm/searcher/intfieldsearcher.cpp
@@ -6,7 +6,11 @@ using search::QueryTermList;
namespace vsm {
-IMPLEMENT_DUPLICATE(IntFieldSearcher);
+std::unique_ptr<FieldSearcher>
+IntFieldSearcher::duplicate() const
+{
+ return std::make_unique<IntFieldSearcher>(*this);
+}
IntFieldSearcher::IntFieldSearcher(FieldIdT fId) :
FieldSearcher(fId),
diff --git a/vsm/src/vespa/vsm/searcher/intfieldsearcher.h b/vsm/src/vespa/vsm/searcher/intfieldsearcher.h
index 3e158b2d93c..ea190bf07cd 100644
--- a/vsm/src/vespa/vsm/searcher/intfieldsearcher.h
+++ b/vsm/src/vespa/vsm/searcher/intfieldsearcher.h
@@ -8,7 +8,7 @@ namespace vsm {
class IntFieldSearcher : public FieldSearcher
{
public:
- DUPLICATE(IntFieldSearcher);
+ std::unique_ptr<FieldSearcher> duplicate() const override;
IntFieldSearcher(FieldIdT fId=0);
~IntFieldSearcher();
void prepare(search::QueryTermList & qtl, const SharedSearcherBuf & buf) override;
diff --git a/vsm/src/vespa/vsm/searcher/utf8exactstringfieldsearcher.cpp b/vsm/src/vespa/vsm/searcher/utf8exactstringfieldsearcher.cpp
index 26c4021ac40..1de8c40c93a 100644
--- a/vsm/src/vespa/vsm/searcher/utf8exactstringfieldsearcher.cpp
+++ b/vsm/src/vespa/vsm/searcher/utf8exactstringfieldsearcher.cpp
@@ -7,7 +7,11 @@ using search::QueryTermList;
namespace vsm {
-IMPLEMENT_DUPLICATE(UTF8ExactStringFieldSearcher);
+std::unique_ptr<FieldSearcher>
+UTF8ExactStringFieldSearcher::duplicate() const
+{
+ return std::make_unique<UTF8ExactStringFieldSearcher>(*this);
+}
size_t
UTF8ExactStringFieldSearcher::matchTerms(const FieldRef & f, const size_t mintsz)
diff --git a/vsm/src/vespa/vsm/searcher/utf8exactstringfieldsearcher.h b/vsm/src/vespa/vsm/searcher/utf8exactstringfieldsearcher.h
index 9cca519d720..49557b8097d 100644
--- a/vsm/src/vespa/vsm/searcher/utf8exactstringfieldsearcher.h
+++ b/vsm/src/vespa/vsm/searcher/utf8exactstringfieldsearcher.h
@@ -16,7 +16,7 @@ protected:
virtual size_t matchTerms(const FieldRef & f, const size_t shortestTerm) override;
public:
- DUPLICATE(UTF8ExactStringFieldSearcher);
+ std::unique_ptr<FieldSearcher> duplicate() const override;
UTF8ExactStringFieldSearcher() : UTF8StringFieldSearcherBase() { }
UTF8ExactStringFieldSearcher(FieldIdT fId) : UTF8StringFieldSearcherBase(fId) { }
};
diff --git a/vsm/src/vespa/vsm/searcher/utf8flexiblestringfieldsearcher.cpp b/vsm/src/vespa/vsm/searcher/utf8flexiblestringfieldsearcher.cpp
index b458b73be61..77708a682a2 100644
--- a/vsm/src/vespa/vsm/searcher/utf8flexiblestringfieldsearcher.cpp
+++ b/vsm/src/vespa/vsm/searcher/utf8flexiblestringfieldsearcher.cpp
@@ -9,7 +9,11 @@ using search::QueryTermList;
namespace vsm {
-IMPLEMENT_DUPLICATE(UTF8FlexibleStringFieldSearcher);
+std::unique_ptr<FieldSearcher>
+UTF8FlexibleStringFieldSearcher::duplicate() const
+{
+ return std::make_unique<UTF8FlexibleStringFieldSearcher>(*this);
+}
size_t
UTF8FlexibleStringFieldSearcher::matchTerms(const FieldRef & f, const size_t mintsz)
diff --git a/vsm/src/vespa/vsm/searcher/utf8flexiblestringfieldsearcher.h b/vsm/src/vespa/vsm/searcher/utf8flexiblestringfieldsearcher.h
index 0e58cae0938..f91bb48a068 100644
--- a/vsm/src/vespa/vsm/searcher/utf8flexiblestringfieldsearcher.h
+++ b/vsm/src/vespa/vsm/searcher/utf8flexiblestringfieldsearcher.h
@@ -26,7 +26,7 @@ private:
virtual size_t matchTerms(const FieldRef & f, const size_t shortestTerm) override;
public:
- DUPLICATE(UTF8FlexibleStringFieldSearcher);
+ std::unique_ptr<FieldSearcher> duplicate() const override;
UTF8FlexibleStringFieldSearcher();
UTF8FlexibleStringFieldSearcher(FieldIdT fId);
};
diff --git a/vsm/src/vespa/vsm/searcher/utf8strchrfieldsearcher.cpp b/vsm/src/vespa/vsm/searcher/utf8strchrfieldsearcher.cpp
index b54ed2c583d..fc78101737e 100644
--- a/vsm/src/vespa/vsm/searcher/utf8strchrfieldsearcher.cpp
+++ b/vsm/src/vespa/vsm/searcher/utf8strchrfieldsearcher.cpp
@@ -7,7 +7,11 @@ using search::byte;
namespace vsm {
-IMPLEMENT_DUPLICATE(UTF8StrChrFieldSearcher);
+std::unique_ptr<FieldSearcher>
+UTF8StrChrFieldSearcher::duplicate() const
+{
+ return std::make_unique<UTF8StrChrFieldSearcher>(*this);
+}
size_t
UTF8StrChrFieldSearcher::matchTerms(const FieldRef & f, const size_t mintsz)
diff --git a/vsm/src/vespa/vsm/searcher/utf8strchrfieldsearcher.h b/vsm/src/vespa/vsm/searcher/utf8strchrfieldsearcher.h
index b109ede3e03..acfe1256ee5 100644
--- a/vsm/src/vespa/vsm/searcher/utf8strchrfieldsearcher.h
+++ b/vsm/src/vespa/vsm/searcher/utf8strchrfieldsearcher.h
@@ -12,7 +12,7 @@ namespace vsm {
class UTF8StrChrFieldSearcher : public UTF8StringFieldSearcherBase
{
public:
- DUPLICATE(UTF8StrChrFieldSearcher);
+ std::unique_ptr<FieldSearcher> duplicate() const override;
UTF8StrChrFieldSearcher() : UTF8StringFieldSearcherBase() { }
UTF8StrChrFieldSearcher(FieldIdT fId) : UTF8StringFieldSearcherBase(fId) { }
diff --git a/vsm/src/vespa/vsm/searcher/utf8substringsearcher.cpp b/vsm/src/vespa/vsm/searcher/utf8substringsearcher.cpp
index 4b8c6e31927..8cda3e27bd5 100644
--- a/vsm/src/vespa/vsm/searcher/utf8substringsearcher.cpp
+++ b/vsm/src/vespa/vsm/searcher/utf8substringsearcher.cpp
@@ -8,7 +8,11 @@ using search::QueryTermList;
namespace vsm {
-IMPLEMENT_DUPLICATE(UTF8SubStringFieldSearcher);
+std::unique_ptr<FieldSearcher>
+UTF8SubStringFieldSearcher::duplicate() const
+{
+ return std::make_unique<UTF8SubStringFieldSearcher>(*this);
+}
size_t
UTF8SubStringFieldSearcher::matchTerms(const FieldRef & f, const size_t mintsz)
diff --git a/vsm/src/vespa/vsm/searcher/utf8substringsearcher.h b/vsm/src/vespa/vsm/searcher/utf8substringsearcher.h
index e034adeb1b5..9e01a56bdba 100644
--- a/vsm/src/vespa/vsm/searcher/utf8substringsearcher.h
+++ b/vsm/src/vespa/vsm/searcher/utf8substringsearcher.h
@@ -11,7 +11,7 @@ namespace vsm {
class UTF8SubStringFieldSearcher : public UTF8StringFieldSearcherBase
{
public:
- DUPLICATE(UTF8SubStringFieldSearcher);
+ std::unique_ptr<FieldSearcher> duplicate() const override;
UTF8SubStringFieldSearcher() : UTF8StringFieldSearcherBase() { }
UTF8SubStringFieldSearcher(FieldIdT fId) : UTF8StringFieldSearcherBase(fId) { }
protected:
diff --git a/vsm/src/vespa/vsm/searcher/utf8substringsnippetmodifier.cpp b/vsm/src/vespa/vsm/searcher/utf8substringsnippetmodifier.cpp
index eee88b34ea6..c19259273d0 100644
--- a/vsm/src/vespa/vsm/searcher/utf8substringsnippetmodifier.cpp
+++ b/vsm/src/vespa/vsm/searcher/utf8substringsnippetmodifier.cpp
@@ -8,7 +8,11 @@ using search::QueryTermList;
namespace vsm {
-IMPLEMENT_DUPLICATE(UTF8SubstringSnippetModifier);
+std::unique_ptr<FieldSearcher>
+UTF8SubstringSnippetModifier::duplicate() const
+{
+ return std::make_unique<UTF8SubstringSnippetModifier>(*this);
+}
size_t
UTF8SubstringSnippetModifier::matchTerms(const FieldRef & f, const size_t mintsz)
diff --git a/vsm/src/vespa/vsm/searcher/utf8substringsnippetmodifier.h b/vsm/src/vespa/vsm/searcher/utf8substringsnippetmodifier.h
index 3d266174f3d..fce0fdc2175 100644
--- a/vsm/src/vespa/vsm/searcher/utf8substringsnippetmodifier.h
+++ b/vsm/src/vespa/vsm/searcher/utf8substringsnippetmodifier.h
@@ -49,7 +49,7 @@ private:
public:
typedef std::shared_ptr<UTF8SubstringSnippetModifier> SP;
- DUPLICATE(UTF8SubstringSnippetModifier);
+ std::unique_ptr<FieldSearcher> duplicate() const override;
UTF8SubstringSnippetModifier();
UTF8SubstringSnippetModifier(FieldIdT fId);
diff --git a/vsm/src/vespa/vsm/searcher/utf8suffixstringfieldsearcher.cpp b/vsm/src/vespa/vsm/searcher/utf8suffixstringfieldsearcher.cpp
index 13074937185..1e9ec246743 100644
--- a/vsm/src/vespa/vsm/searcher/utf8suffixstringfieldsearcher.cpp
+++ b/vsm/src/vespa/vsm/searcher/utf8suffixstringfieldsearcher.cpp
@@ -7,7 +7,11 @@ using search::QueryTermList;
namespace vsm {
-IMPLEMENT_DUPLICATE(UTF8SuffixStringFieldSearcher);
+std::unique_ptr<FieldSearcher>
+UTF8SuffixStringFieldSearcher::duplicate() const
+{
+ return std::make_unique<UTF8SuffixStringFieldSearcher>(*this);
+}
size_t
UTF8SuffixStringFieldSearcher::matchTerms(const FieldRef & f, const size_t mintsz)
diff --git a/vsm/src/vespa/vsm/searcher/utf8suffixstringfieldsearcher.h b/vsm/src/vespa/vsm/searcher/utf8suffixstringfieldsearcher.h
index 8bb32ab3c39..cc55ee7bb43 100644
--- a/vsm/src/vespa/vsm/searcher/utf8suffixstringfieldsearcher.h
+++ b/vsm/src/vespa/vsm/searcher/utf8suffixstringfieldsearcher.h
@@ -16,7 +16,7 @@ protected:
virtual size_t matchTerms(const FieldRef & f, const size_t shortestTerm) override;
public:
- DUPLICATE(UTF8SuffixStringFieldSearcher);
+ std::unique_ptr<FieldSearcher> duplicate() const override;
UTF8SuffixStringFieldSearcher() : UTF8StringFieldSearcherBase() { }
UTF8SuffixStringFieldSearcher(FieldIdT fId) : UTF8StringFieldSearcherBase(fId) { }
};
diff --git a/vsm/src/vespa/vsm/vsm/fieldsearchspec.cpp b/vsm/src/vespa/vsm/vsm/fieldsearchspec.cpp
index 8d4cf72b824..8bb047beb24 100644
--- a/vsm/src/vespa/vsm/vsm/fieldsearchspec.cpp
+++ b/vsm/src/vespa/vsm/vsm/fieldsearchspec.cpp
@@ -52,6 +52,9 @@ FieldSearchSpec::FieldSearchSpec() :
}
FieldSearchSpec::~FieldSearchSpec() = default;
+FieldSearchSpec&
+FieldSearchSpec::operator=(FieldSearchSpec&& rhs) = default;
+
FieldSearchSpec::FieldSearchSpec(const FieldIdT & fid, const vespalib::string & fname,
VsmfieldsConfig::Fieldspec::Searchmethod searchDef,
const vespalib::string & arg1, size_t maxLength_) :
@@ -72,36 +75,36 @@ FieldSearchSpec::FieldSearchSpec(const FieldIdT & fid, const vespalib::string &
case VsmfieldsConfig::Fieldspec::Searchmethod::SSE2UTF8:
case VsmfieldsConfig::Fieldspec::Searchmethod::UTF8:
if (arg1 == "substring") {
- _searcher = UTF8SubStringFieldSearcher(fid);
+ _searcher = std::make_unique<UTF8SubStringFieldSearcher>(fid);
} else if (arg1 == "suffix") {
- _searcher = UTF8SuffixStringFieldSearcher(fid);
+ _searcher = std::make_unique<UTF8SuffixStringFieldSearcher>(fid);
} else if (arg1 == "exact") {
- _searcher = UTF8ExactStringFieldSearcher(fid);
+ _searcher = std::make_unique<UTF8ExactStringFieldSearcher>(fid);
} else if (arg1 == "word") {
- _searcher = UTF8ExactStringFieldSearcher(fid);
+ _searcher = std::make_unique<UTF8ExactStringFieldSearcher>(fid);
} else if (searchDef == VsmfieldsConfig::Fieldspec::Searchmethod::UTF8) {
- _searcher = UTF8StrChrFieldSearcher(fid);
+ _searcher = std::make_unique<UTF8StrChrFieldSearcher>(fid);
} else {
- _searcher = FUTF8StrChrFieldSearcher(fid);
+ _searcher = std::make_unique<FUTF8StrChrFieldSearcher>(fid);
}
break;
case VsmfieldsConfig::Fieldspec::Searchmethod::BOOL:
- _searcher = BoolFieldSearcher(fid);
+ _searcher = std::make_unique<BoolFieldSearcher>(fid);
break;
case VsmfieldsConfig::Fieldspec::Searchmethod::INT8:
case VsmfieldsConfig::Fieldspec::Searchmethod::INT16:
case VsmfieldsConfig::Fieldspec::Searchmethod::INT32:
case VsmfieldsConfig::Fieldspec::Searchmethod::INT64:
- _searcher = IntFieldSearcher(fid);
+ _searcher = std::make_unique<IntFieldSearcher>(fid);
break;
case VsmfieldsConfig::Fieldspec::Searchmethod::FLOAT:
- _searcher = FloatFieldSearcher(fid);
+ _searcher = std::make_unique<FloatFieldSearcher>(fid);
break;
case VsmfieldsConfig::Fieldspec::Searchmethod::DOUBLE:
- _searcher = DoubleFieldSearcher(fid);
+ _searcher = std::make_unique<DoubleFieldSearcher>(fid);
break;
}
- if (_searcher.valid()) {
+ if (_searcher) {
setMatchType(_searcher, arg1);
_searcher->maxFieldLength(maxLength());
}
@@ -123,7 +126,7 @@ FieldSearchSpec::reconfig(const search::QueryTerm & term)
(term.isExactstring() && _arg1 != "exact") ||
(term.isPrefix() && _arg1 == "suffix"))
{
- _searcher = UTF8FlexibleStringFieldSearcher(id());
+ _searcher = std::make_unique<UTF8FlexibleStringFieldSearcher>(id());
// preserve the basic match property of the searcher
setMatchType(_searcher, _arg1);
LOG(debug, "Reconfigured to use UTF8FlexibleStringFieldSearcher (%s) for field '%s' with id '%d'",
@@ -139,7 +142,7 @@ FieldSearchSpec::reconfig(const search::QueryTerm & term)
vespalib::asciistream & operator <<(vespalib::asciistream & os, const FieldSearchSpec & f)
{
os << f._id << ' ' << f._name << ' ';
- if ( ! f._searcher.valid()) {
+ if ( ! f._searcher) {
os << " No searcher defined.\n";
}
return os;
@@ -251,7 +254,7 @@ bool FieldSearchSpecMap::buildFromConfig(const VsmfieldsHandle & conf)
LOG(spam, "Parsing %s", cfs.name.c_str());
FieldIdT fieldId = specMap().size();
FieldSearchSpec fss(fieldId, cfs.name, cfs.searchmethod, cfs.arg1.c_str(), cfs.maxlength);
- _specMap[fieldId] = fss;
+ _specMap[fieldId] = std::move(fss);
_nameIdMap.add(cfs.name, fieldId);
LOG(spam, "M in %d = %s", fieldId, cfs.name.c_str());
}
@@ -298,7 +301,7 @@ void FieldSearchSpecMap::buildSearcherMap(const StringFieldIdTMapT & fieldsInQue
for (const auto & entry : fieldsInQuery) {
FieldIdT fId = entry.second;
const FieldSearchSpec & spec = specMap().find(fId)->second;
- fieldSearcherMap.push_back(spec.searcher());
+ fieldSearcherMap.emplace_back(spec.searcher().duplicate());
}
std::sort(fieldSearcherMap.begin(), fieldSearcherMap.end(), lesserField);
}
diff --git a/vsm/src/vespa/vsm/vsm/fieldsearchspec.h b/vsm/src/vespa/vsm/vsm/fieldsearchspec.h
index 445334bd182..d3feb8621b5 100644
--- a/vsm/src/vespa/vsm/vsm/fieldsearchspec.h
+++ b/vsm/src/vespa/vsm/vsm/fieldsearchspec.h
@@ -14,10 +14,11 @@ public:
VsmfieldsConfig::Fieldspec::Searchmethod searchMethod,
const vespalib::string & arg1, size_t maxLength);
~FieldSearchSpec();
+ FieldSearchSpec& operator=(FieldSearchSpec&& rhs);
const FieldSearcher & searcher() const { return *_searcher; }
const vespalib::string & name() const { return _name; }
FieldIdT id() const { return _id; }
- bool valid() const { return _searcher.valid(); }
+ bool valid() const { return static_cast<bool>(_searcher); }
size_t maxLength() const { return _maxLength; }
/**