summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-01-10 13:18:13 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2019-01-11 17:19:49 +0000
commit869336f82c9e9e40fc722e4d32ec8f778a50008a (patch)
treeff628615e65d19727b8899f67f4afbb137b9b256
parent6bdf170a470a6f9519bab9688dfba1fd5b5f4397 (diff)
GC unused code
-rw-r--r--searchcore/src/tests/proton/docsummary/docsummary.cpp97
-rw-r--r--searchsummary/src/tests/docsumformat/docsum-pack.cpp306
-rw-r--r--searchsummary/src/tests/docsummary/positionsdfw_test.cpp8
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.cpp8
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.h5
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp32
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/attributedfw.h2
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.cpp11
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.h43
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp2
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp102
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.cpp3
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.h3
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp18
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.h5
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp2
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.h3
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp25
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/resultconfig.h19
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp13
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.h4
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/textextractordfw.cpp9
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/urlresult.cpp495
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/urlresult.h47
-rw-r--r--vsm/src/vespa/vsm/vsm/docsumconfig.cpp2
25 files changed, 202 insertions, 1062 deletions
diff --git a/searchcore/src/tests/proton/docsummary/docsummary.cpp b/searchcore/src/tests/proton/docsummary/docsummary.cpp
index db6116073e6..c0c706383f6 100644
--- a/searchcore/src/tests/proton/docsummary/docsummary.cpp
+++ b/searchcore/src/tests/proton/docsummary/docsummary.cpp
@@ -106,7 +106,7 @@ public:
TuneFileSummary(),
_fileHeaderContext,
_noTlSyncer,
- NULL),
+ nullptr),
_serialNum(1)
{
}
@@ -262,7 +262,7 @@ public:
op.setPrevDbDocumentId(prevDbdId);
_ddb->getFeedHandler().storeOperation(op, std::make_shared<search::IgnoreCallback>());
SearchView *sv(dynamic_cast<SearchView *>(_ddb->getReadySubDB()->getSearchView().get()));
- if (sv != NULL) {
+ if (sv != nullptr) {
// cf. FeedView::putAttributes()
DocIdLimit &docIdLimit = sv->getDocIdLimit();
if (docIdLimit.get() <= lid)
@@ -278,14 +278,11 @@ private:
ResultConfig _resultCfg;
std::set<vespalib::string> _markupFields;
- const ResultConfig &getResultConfig() const
- {
+ const ResultConfig &getResultConfig() const{
return _resultCfg;
}
- const std::set<vespalib::string> &
- getMarkupFields() const
- {
+ const std::set<vespalib::string> &getMarkupFields() const{
return _markupFields;
}
@@ -295,31 +292,12 @@ private:
GeneralResultPtr
getResult(const DocsumReply & reply, uint32_t id, uint32_t resultClassID);
- bool
- assertString(const std::string & exp,
- const std::string & fieldName,
- DocumentStoreAdapter &dsa,
- uint32_t id);
+ bool assertString(const std::string & exp, const std::string & fieldName, DocumentStoreAdapter &dsa, uint32_t id);
- bool
- assertString(const std::string &exp,
- const std::string &fieldName,
- const DocsumReply &reply,
- uint32_t id,
- uint32_t resultClassID);
+ void assertTensor(const Tensor::UP &exp, const std::string &fieldName, const DocsumReply &reply,
+ uint32_t id, uint32_t resultClassID);
- void
- assertTensor(const Tensor::UP &exp,
- const std::string &fieldName,
- const DocsumReply &reply,
- uint32_t id,
- uint32_t resultClassID);
-
- bool
- assertSlime(const std::string &exp,
- const DocsumReply &reply,
- uint32_t id,
- bool relaxed = false);
+ bool assertSlime(const std::string &exp, const DocsumReply &reply, uint32_t id,bool relaxed = false);
void requireThatAdapterHandlesAllFieldTypes();
void requireThatAdapterHandlesMultipleDocuments();
@@ -346,12 +324,10 @@ GeneralResultPtr
Test::getResult(DocumentStoreAdapter & dsa, uint32_t docId)
{
DocsumStoreValue docsum = dsa.getMappedDocsum(docId);
- ASSERT_TRUE(docsum.pt() != NULL);
- GeneralResultPtr retval(new GeneralResult(dsa.getResultClass(),
- 0, 0, 0));
+ ASSERT_TRUE(docsum.pt() != nullptr);
+ auto retval = std::make_unique<GeneralResult>(dsa.getResultClass());
// skip the 4 byte class id
- ASSERT_TRUE(retval->unpack(docsum.pt() + 4,
- docsum.len() - 4) == 0);
+ ASSERT_TRUE(retval->unpack(docsum.pt() + 4, docsum.len() - 4));
return retval;
}
@@ -359,46 +335,26 @@ Test::getResult(DocumentStoreAdapter & dsa, uint32_t docId)
GeneralResultPtr
Test::getResult(const DocsumReply & reply, uint32_t id, uint32_t resultClassID)
{
- GeneralResultPtr retval(new GeneralResult(getResultConfig().
- LookupResultClass(resultClassID),
- 0, 0, 0));
+ auto retval = std::make_unique<GeneralResult>(getResultConfig().LookupResultClass(resultClassID));
const DocsumReply::Docsum & docsum = reply.docsums[id];
// skip the 4 byte class id
- ASSERT_EQUAL(0, retval->unpack(docsum.data.c_str() + 4, docsum.data.size() - 4));
+ ASSERT_TRUE(retval->unpack(docsum.data.c_str() + 4, docsum.data.size() - 4));
return retval;
}
bool
Test::assertString(const std::string & exp, const std::string & fieldName,
- DocumentStoreAdapter &dsa,
- uint32_t id)
+ DocumentStoreAdapter &dsa, uint32_t id)
{
GeneralResultPtr res = getResult(dsa, id);
- return EXPECT_EQUAL(exp, std::string(res->GetEntry(fieldName.c_str())->
- _stringval,
- res->GetEntry(fieldName.c_str())->
- _stringlen));
+ return EXPECT_EQUAL(exp, std::string(res->GetEntry(fieldName.c_str())->_stringval,
+ res->GetEntry(fieldName.c_str())->_stringlen));
}
-
-bool
-Test::assertString(const std::string & exp, const std::string & fieldName,
- const DocsumReply & reply,
- uint32_t id, uint32_t resultClassID)
-{
- GeneralResultPtr res = getResult(reply, id, resultClassID);
- return EXPECT_EQUAL(exp, std::string(res->GetEntry(fieldName.c_str())->
- _stringval,
- res->GetEntry(fieldName.c_str())->
- _stringlen));
-}
-
-
void
Test::assertTensor(const Tensor::UP & exp, const std::string & fieldName,
- const DocsumReply & reply,
- uint32_t id, uint32_t)
+ const DocsumReply & reply, uint32_t id, uint32_t)
{
const DocsumReply::Docsum & docsum = reply.docsums[id];
uint32_t classId;
@@ -408,8 +364,7 @@ Test::assertTensor(const Tensor::UP & exp, const std::string & fieldName,
vespalib::Slime slime;
vespalib::Memory serialized(docsum.data.c_str() + sizeof(classId),
docsum.data.size() - sizeof(classId));
- size_t decodeRes = BinaryFormat::decode(serialized,
- slime);
+ size_t decodeRes = BinaryFormat::decode(serialized, slime);
ASSERT_EQUAL(decodeRes, serialized.size);
EXPECT_EQUAL(exp.get() != nullptr, slime.get()[fieldName].valid());
@@ -547,7 +502,7 @@ Test::requireThatAdapterHandlesMultipleDocuments()
}
{ // doc 2
DocsumStoreValue docsum = dsa.getMappedDocsum(2);
- EXPECT_TRUE(docsum.pt() == NULL);
+ EXPECT_TRUE(docsum.pt() == nullptr);
}
{ // doc 0 (again)
GeneralResultPtr res = getResult(dsa, 0);
@@ -640,7 +595,7 @@ Test::requireThatDocsumRequestIsProcessed()
EXPECT_TRUE(assertSlime("{a:40}", *rep, 1, false));
EXPECT_EQUAL(search::endDocId, rep->docsums[2].docid);
EXPECT_EQUAL(gid9, rep->docsums[2].gid);
- EXPECT_TRUE(rep->docsums[2].data.get() == NULL);
+ EXPECT_TRUE(rep->docsums[2].data.get() == nullptr);
}
@@ -874,11 +829,11 @@ Test::requireThatSummaryAdapterHandlesPutAndRemove()
dc._sa->put(1, 1, *exp);
IDocumentStore & store = dc._ddb->getReadySubDB()->getSummaryManager()->getBackingStore();
Document::UP act = store.read(1, *bc._repo);
- EXPECT_TRUE(act.get() != NULL);
+ EXPECT_TRUE(act.get() != nullptr);
EXPECT_EQUAL(exp->getType(), act->getType());
EXPECT_EQUAL("foo", act->getValue("f1")->toString());
dc._sa->remove(2, 1);
- EXPECT_TRUE(store.read(1, *bc._repo).get() == NULL);
+ EXPECT_TRUE(store.read(1, *bc._repo).get() == nullptr);
}
@@ -928,7 +883,7 @@ Test::requireThatAnnotationsAreUsed()
IDocumentStore & store = dc._ddb->getReadySubDB()->getSummaryManager()->getBackingStore();
Document::UP act = store.read(1, *bc._repo);
- EXPECT_TRUE(act.get() != NULL);
+ EXPECT_TRUE(act.get() != nullptr);
EXPECT_EQUAL(exp->getType(), act->getType());
EXPECT_EQUAL("foo bar", act->getValue("g")->getAsString());
EXPECT_EQUAL("foo bar", act->getValue("dynamicstring")->getAsString());
@@ -1082,7 +1037,7 @@ Test::requireThatUrisAreUsed()
IDocumentStore & store =
dc._ddb->getReadySubDB()->getSummaryManager()->getBackingStore();
Document::UP act = store.read(1, *bc._repo);
- EXPECT_TRUE(act.get() != NULL);
+ EXPECT_TRUE(act.get() != nullptr);
EXPECT_EQUAL(exp->getType(), act->getType());
DocumentStoreAdapter dsa(store, *bc._repo, getResultConfig(), "class0",
@@ -1140,7 +1095,7 @@ Test::requireThatPositionsAreUsed()
IDocumentStore & store =
dc._ddb->getReadySubDB()->getSummaryManager()->getBackingStore();
Document::UP act = store.read(1, *bc._repo);
- EXPECT_TRUE(act.get() != NULL);
+ EXPECT_TRUE(act.get() != nullptr);
EXPECT_EQUAL(exp->getType(), act->getType());
DocsumRequest req;
@@ -1219,7 +1174,7 @@ Test::requireThatRawFieldsWorks()
IDocumentStore & store = dc._ddb->getReadySubDB()->getSummaryManager()->getBackingStore();
Document::UP act = store.read(1, *bc._repo);
- EXPECT_TRUE(act.get() != NULL);
+ EXPECT_TRUE(act.get() != nullptr);
EXPECT_EQUAL(exp->getType(), act->getType());
DocumentStoreAdapter dsa(store, *bc._repo, getResultConfig(), "class0",
diff --git a/searchsummary/src/tests/docsumformat/docsum-pack.cpp b/searchsummary/src/tests/docsumformat/docsum-pack.cpp
index 7a9834e3fd8..18b38db3fa1 100644
--- a/searchsummary/src/tests/docsumformat/docsum-pack.cpp
+++ b/searchsummary/src/tests/docsumformat/docsum-pack.cpp
@@ -10,7 +10,6 @@ LOG_SETUP("docsum-pack");
using namespace search::docsummary;
-
// needed to resolve external symbol from httpd.h on AIX
void FastS_block_usr2() {}
@@ -20,8 +19,8 @@ class MyApp : public FastOS_Application
private:
bool _rc;
uint32_t _cnt;
- search::docsummary::ResultConfig _config;
- search::docsummary::ResultPacker _packer;
+ ResultConfig _config;
+ ResultPacker _packer;
public:
MyApp();
@@ -33,33 +32,18 @@ public:
{ ReportTestResult(line, rc); return rc; }
// compare runtime info (,but ignore result class)
- bool Equal(search::docsummary::ResEntry *a, search::docsummary::ResEntry *b);
- bool Equal(search::docsummary::GeneralResult *a, search::docsummary::GeneralResult *b);
-
- void TestFieldIndex(uint32_t line, search::docsummary::GeneralResult *gres,
- const char *field, int idx);
-
- void TestIntValue(uint32_t line, search::docsummary::GeneralResult *gres,
- const char *field, uint32_t value);
-
- void TestDoubleValue(uint32_t line, search::docsummary::GeneralResult *gres,
- const char *field, double value);
+ bool Equal(ResEntry *a, ResEntry *b);
+ bool Equal(GeneralResult *a, GeneralResult *b);
- void TestInt64Value(uint32_t line, search::docsummary::GeneralResult *gres,
- const char *field, uint64_t value);
+ void TestIntValue(uint32_t line, GeneralResult *gres, const char *field, uint32_t value);
+ void TestDoubleValue(uint32_t line, GeneralResult *gres, const char *field, double value);
+ void TestInt64Value(uint32_t line, GeneralResult *gres, const char *field, uint64_t value);
+ void TestStringValue(uint32_t line, GeneralResult *gres, const char *field, const char *value);
+ void TestDataValue(uint32_t line, GeneralResult *gres, const char *field, const char *value);
- void TestStringValue(uint32_t line, search::docsummary::GeneralResult *gres,
- const char *field, const char *value);
-
- void TestDataValue(uint32_t line, search::docsummary::GeneralResult *gres,
- const char *field, const char *value);
-
- void TestBasic();
void TestFailLong();
void TestFailShort();
void TestFailOrder();
- void TestCompress();
- void TestCompat();
void TestBasicInplace();
void TestCompressInplace();
@@ -72,7 +56,8 @@ MyApp::MyApp()
_config(),
_packer(&_config)
{}
-MyApp::~MyApp() {}
+
+MyApp::~MyApp() = default;
void
MyApp::ReportTestResult(uint32_t line, bool rc)
@@ -89,7 +74,7 @@ MyApp::ReportTestResult(uint32_t line, bool rc)
bool
-MyApp::Equal(search::docsummary::ResEntry *a, search::docsummary::ResEntry *b)
+MyApp::Equal(ResEntry *a, ResEntry *b)
{
if (a->_type != b->_type)
return false;
@@ -106,7 +91,7 @@ MyApp::Equal(search::docsummary::ResEntry *a, search::docsummary::ResEntry *b)
bool
-MyApp::Equal(search::docsummary::GeneralResult *a, search::docsummary::GeneralResult *b)
+MyApp::Equal(GeneralResult *a, GeneralResult *b)
{
uint32_t numEntries = a->GetClass()->GetNumEntries();
@@ -125,56 +110,36 @@ MyApp::Equal(search::docsummary::GeneralResult *a, search::docsummary::GeneralRe
return true;
}
-
-void
-MyApp::TestFieldIndex(uint32_t line, search::docsummary::GeneralResult *gres,
- const char *field, int idx)
-{
- bool rc = (gres != NULL &&
- gres->GetClass()->GetIndexFromName(field) == idx);
-
- RTR(line, rc);
-}
-
-
void
-MyApp::TestIntValue(uint32_t line, search::docsummary::GeneralResult *gres,
- const char *field, uint32_t value)
+MyApp::TestIntValue(uint32_t line, GeneralResult *gres, const char *field, uint32_t value)
{
- search::docsummary::ResEntry *entry
- = (gres != NULL) ? gres->GetEntry(field) : NULL;
+ ResEntry *entry = (gres != nullptr) ? gres->GetEntry(field) : nullptr;
- bool rc = (entry != NULL &&
+ bool rc = (entry != nullptr &&
entry->_type == RES_INT &&
entry->_intval == value);
RTR(line, rc);
}
-
void
-MyApp::TestDoubleValue(uint32_t line, search::docsummary::GeneralResult *gres,
- const char *field, double value)
+MyApp::TestDoubleValue(uint32_t line, GeneralResult *gres, const char *field, double value)
{
- search::docsummary::ResEntry *entry
- = (gres != NULL) ? gres->GetEntry(field) : NULL;
+ ResEntry *entry = (gres != nullptr) ? gres->GetEntry(field) : nullptr;
- bool rc = (entry != NULL &&
+ bool rc = (entry != nullptr &&
entry->_type == RES_DOUBLE &&
entry->_doubleval == value);
RTR(line, rc);
}
-
void
-MyApp::TestInt64Value(uint32_t line, search::docsummary::GeneralResult *gres,
- const char *field, uint64_t value)
+MyApp::TestInt64Value(uint32_t line, GeneralResult *gres, const char *field, uint64_t value)
{
- search::docsummary::ResEntry *entry
- = (gres != NULL) ? gres->GetEntry(field) : NULL;
+ ResEntry *entry = (gres != nullptr) ? gres->GetEntry(field) : nullptr;
- bool rc = (entry != NULL &&
+ bool rc = (entry != nullptr &&
entry->_type == RES_INT64 &&
entry->_int64val == value);
@@ -183,36 +148,29 @@ MyApp::TestInt64Value(uint32_t line, search::docsummary::GeneralResult *gres,
void
-MyApp::TestStringValue(uint32_t line, search::docsummary::GeneralResult *gres,
- const char *field, const char *value)
+MyApp::TestStringValue(uint32_t line, GeneralResult *gres, const char *field, const char *value)
{
- search::docsummary::ResEntry *entry
- = (gres != NULL) ? gres->GetEntry(field) : NULL;
+ ResEntry *entry = (gres != nullptr) ? gres->GetEntry(field) : nullptr;
- bool rc = (entry != NULL &&
+ bool rc = (entry != nullptr &&
entry->_type == RES_STRING &&
entry->_stringlen == strlen(value) &&
strncmp(entry->_stringval, value, entry->_stringlen) == 0);
- if (!rc && entry != NULL) {
- LOG(warning,
- "string value '%.*s' != '%s'",
- (int) entry->_stringlen,
- entry->_stringval, value);
+ if (!rc && entry != nullptr) {
+ LOG(warning,"string value '%.*s' != '%s'",
+ (int) entry->_stringlen, entry->_stringval, value);
}
RTR(line, rc);
}
-
void
-MyApp::TestDataValue(uint32_t line, search::docsummary::GeneralResult *gres,
- const char *field, const char *value)
+MyApp::TestDataValue(uint32_t line, GeneralResult *gres, const char *field, const char *value)
{
- search::docsummary::ResEntry *entry
- = (gres != NULL) ? gres->GetEntry(field) : NULL;
+ ResEntry *entry = (gres != nullptr) ? gres->GetEntry(field) : nullptr;
- bool rc = (entry != NULL &&
+ bool rc = (entry != nullptr &&
entry->_type == RES_DATA &&
entry->_datalen == strlen(value) &&
strncmp(entry->_dataval, value, entry->_datalen) == 0);
@@ -220,62 +178,6 @@ MyApp::TestDataValue(uint32_t line, search::docsummary::GeneralResult *gres,
RTR(line, rc);
}
-
-void
-MyApp::TestBasic()
-{
- const char *buf;
- uint32_t buflen;
-
- search::docsummary::urlresult *res;
- search::docsummary::GeneralResult *gres;
-
- uint32_t intval = 4;
- uint16_t shortval = 2;
- uint8_t byteval = 1;
- float floatval = 4.5;
- double doubleval = 8.75;
- uint64_t int64val = 8;
- const char *strval = "This is a string";
- const char *datval = "This is data";
- const char *lstrval = "This is a long string";
- const char *ldatval = "This is long data";
-
- RTR(__LINE__, _packer.Init(0));
- RTR(__LINE__, _packer.AddInteger(intval));
- RTR(__LINE__, _packer.AddShort(shortval));
- RTR(__LINE__, _packer.AddByte(byteval));
- RTR(__LINE__, _packer.AddFloat(floatval));
- RTR(__LINE__, _packer.AddDouble(doubleval));
- RTR(__LINE__, _packer.AddInt64(int64val));
- RTR(__LINE__, _packer.AddString(strval, strlen(strval)));
- RTR(__LINE__, _packer.AddData(datval, strlen(datval)));
- RTR(__LINE__, _packer.AddLongString(lstrval, strlen(lstrval)));
- RTR(__LINE__, _packer.AddLongData(ldatval, strlen(ldatval)));
- RTR(__LINE__, _packer.GetDocsumBlob(&buf, &buflen));
-
- res = _config.Unpack(0, 0, 0, buf, buflen);
- gres = res->IsGeneral() ? (search::docsummary::GeneralResult *) res : NULL;
-
- RTR(__LINE__, gres != NULL);
- TestIntValue (__LINE__, gres, "integer", 4);
- TestIntValue (__LINE__, gres, "short", 2);
- TestIntValue (__LINE__, gres, "byte", 1);
- TestDoubleValue(__LINE__, gres, "float", floatval);
- TestDoubleValue(__LINE__, gres, "double", doubleval);
- TestInt64Value (__LINE__, gres, "int64", int64val);
- TestStringValue(__LINE__, gres, "string", strval);
- TestDataValue (__LINE__, gres, "data", datval);
- TestStringValue(__LINE__, gres, "longstring", lstrval);
- TestDataValue (__LINE__, gres, "longdata", ldatval);
- RTR(__LINE__, (gres != NULL &&
- gres->GetClass()->GetNumEntries() == 10));
- RTR(__LINE__, (gres != NULL &&
- gres->GetClass()->GetClassID() == 0));
- delete res;
-}
-
-
void
MyApp::TestFailLong()
{
@@ -308,7 +210,6 @@ MyApp::TestFailLong()
RTR(__LINE__, !_packer.GetDocsumBlob(&buf, &buflen));
}
-
void
MyApp::TestFailShort()
{
@@ -371,95 +272,6 @@ MyApp::TestFailOrder()
}
-void
-MyApp::TestCompress()
-{
- const char *buf;
- uint32_t buflen;
-
- search::docsummary::urlresult *res;
- search::docsummary::GeneralResult *gres;
-
- const char *lstrval = "string string string";
- const char *ldatval = "data data data";
-
- RTR(__LINE__, _packer.Init(2));
- RTR(__LINE__, _packer.AddLongString(lstrval, strlen(lstrval)));
- RTR(__LINE__, _packer.AddLongData(ldatval, strlen(ldatval)));
- RTR(__LINE__, _packer.GetDocsumBlob(&buf, &buflen));
-
- res = _config.Unpack(0, 0, 0, buf, buflen);
- gres = res->IsGeneral() ? (search::docsummary::GeneralResult *) res : NULL;
-
- RTR(__LINE__, gres != NULL);
- TestStringValue(__LINE__, gres, "text", lstrval);
- TestDataValue (__LINE__, gres, "data", ldatval);
- RTR(__LINE__, (gres != NULL &&
- gres->GetClass()->GetNumEntries() == 2));
- RTR(__LINE__, (gres != NULL &&
- gres->GetClass()->GetClassID() == 2));
- delete res;
-}
-
-
-void
-MyApp::TestCompat()
-{
- const char *buf;
- uint32_t buflen;
-
- search::docsummary::urlresult *res1;
- search::docsummary::GeneralResult *gres1;
-
- search::docsummary::urlresult *res2;
- search::docsummary::GeneralResult *gres2;
-
- const char *strval = "string string string string";
- const char *datval = "data data data data";
-
- RTR(__LINE__, _packer.Init(1));
- RTR(__LINE__, _packer.AddData(strval, strlen(strval)));
- RTR(__LINE__, _packer.AddString(datval, strlen(datval)));
- RTR(__LINE__, _packer.GetDocsumBlob(&buf, &buflen));
- res1 = _config.Unpack(0, 0, 0, buf, buflen);
- gres1 = res1->IsGeneral() ? (search::docsummary::GeneralResult *) res1 : NULL;
-
- RTR(__LINE__, _packer.Init(2));
- RTR(__LINE__, _packer.AddLongData(strval, strlen(strval)));
- RTR(__LINE__, _packer.AddLongString(datval, strlen(datval)));
- RTR(__LINE__, _packer.GetDocsumBlob(&buf, &buflen));
- res2 = _config.Unpack(0, 0, 0, buf, buflen);
- gres2 = res2->IsGeneral() ? (search::docsummary::GeneralResult *) res2 : NULL;
-
- RTR(__LINE__, gres1 != NULL);
- RTR(__LINE__, gres2 != NULL);
-
- TestStringValue(__LINE__, gres1, "text", strval);
- TestDataValue (__LINE__, gres1, "data", datval);
- TestFieldIndex (__LINE__, gres1, "text", 0);
- TestFieldIndex (__LINE__, gres1, "data", 1);
- RTR(__LINE__, (gres1 != NULL &&
- gres1->GetClass()->GetNumEntries() == 2));
-
- TestStringValue(__LINE__, gres2, "text", strval);
- TestDataValue (__LINE__, gres2, "data", datval);
- TestFieldIndex (__LINE__, gres2, "text", 0);
- TestFieldIndex (__LINE__, gres2, "data", 1);
- RTR(__LINE__, (gres2 != NULL &&
- gres2->GetClass()->GetNumEntries() == 2));
-
- RTR(__LINE__, (gres1 != NULL &&
- gres1->GetClass()->GetClassID() == 1));
- RTR(__LINE__, (gres2 != NULL &&
- gres2->GetClass()->GetClassID() == 2));
-
- RTR(__LINE__, (gres1 != NULL && gres2 != NULL &&
- Equal(gres1, gres2)));
-
- delete res1;
- delete res2;
-}
-
void
MyApp::TestBasicInplace()
@@ -467,8 +279,8 @@ MyApp::TestBasicInplace()
const char *buf;
uint32_t buflen;
- const search::docsummary::ResultClass *resClass;
- search::docsummary::GeneralResult *gres;
+ const ResultClass *resClass;
+ GeneralResult *gres;
uint32_t intval = 4;
uint16_t shortval = 2;
@@ -495,18 +307,18 @@ MyApp::TestBasicInplace()
RTR(__LINE__, _packer.GetDocsumBlob(&buf, &buflen));
resClass = _config.LookupResultClass(_config.GetClassID(buf, buflen));
- if (resClass == NULL) {
- gres = NULL;
+ if (resClass == nullptr) {
+ gres = nullptr;
} else {
DocsumStoreValue value(buf, buflen);
- gres = new search::docsummary::GeneralResult(resClass, 0, 0, 0);
+ gres = new GeneralResult(resClass);
if (!gres->inplaceUnpack(value)) {
delete gres;
- gres = NULL;
+ gres = nullptr;
}
}
- RTR(__LINE__, gres != NULL);
+ RTR(__LINE__, gres != nullptr);
TestIntValue (__LINE__, gres, "integer", 4);
TestIntValue (__LINE__, gres, "short", 2);
TestIntValue (__LINE__, gres, "byte", 1);
@@ -517,9 +329,9 @@ MyApp::TestBasicInplace()
TestDataValue (__LINE__, gres, "data", datval);
TestStringValue(__LINE__, gres, "longstring", lstrval);
TestDataValue (__LINE__, gres, "longdata", ldatval);
- RTR(__LINE__, (gres != NULL &&
+ RTR(__LINE__, (gres != nullptr &&
gres->GetClass()->GetNumEntries() == 10));
- RTR(__LINE__, (gres != NULL &&
+ RTR(__LINE__, (gres != nullptr &&
gres->GetClass()->GetClassID() == 0));
delete gres;
}
@@ -533,8 +345,8 @@ MyApp::TestCompressInplace()
search::RawBuf field1(32768);
search::RawBuf field2(32768);
- const search::docsummary::ResultClass *resClass;
- search::docsummary::GeneralResult *gres;
+ const ResultClass *resClass;
+ GeneralResult *gres;
const char *lstrval = "string string string";
const char *ldatval = "data data data";
@@ -545,48 +357,46 @@ MyApp::TestCompressInplace()
RTR(__LINE__, _packer.GetDocsumBlob(&buf, &buflen));
resClass = _config.LookupResultClass(_config.GetClassID(buf, buflen));
- if (resClass == NULL) {
- gres = NULL;
+ if (resClass == nullptr) {
+ gres = nullptr;
} else {
DocsumStoreValue value(buf, buflen);
- gres = new search::docsummary::GeneralResult(resClass, 0, 0, 0);
+ gres = new GeneralResult(resClass);
if (!gres->inplaceUnpack(value)) {
delete gres;
- gres = NULL;
+ gres = nullptr;
}
}
- search::docsummary::ResEntry *e1 = (gres == NULL) ? NULL : gres->GetEntry("text");
- search::docsummary::ResEntry *e2 = (gres == NULL) ? NULL : gres->GetEntry("data");
+ ResEntry *e1 = (gres == nullptr) ? nullptr : gres->GetEntry("text");
+ ResEntry *e2 = (gres == nullptr) ? nullptr : gres->GetEntry("data");
- if (e1 != NULL)
+ if (e1 != nullptr)
e1->_extract_field(&field1);
- if (e2 != NULL)
+ if (e2 != nullptr)
e2->_extract_field(&field2);
- RTR(__LINE__, gres != NULL);
- RTR(__LINE__, e1 != NULL);
- RTR(__LINE__, e2 != NULL);
+ RTR(__LINE__, gres != nullptr);
+ RTR(__LINE__, e1 != nullptr);
+ RTR(__LINE__, e2 != nullptr);
RTR(__LINE__, strcmp(field1.GetDrainPos(), lstrval) == 0);
RTR(__LINE__, strcmp(field2.GetDrainPos(), ldatval) == 0);
RTR(__LINE__, strlen(lstrval) == field1.GetUsedLen());
RTR(__LINE__, strlen(ldatval) == field2.GetUsedLen());
- RTR(__LINE__, (gres != NULL &&
+ RTR(__LINE__, (gres != nullptr &&
gres->GetClass()->GetNumEntries() == 2));
- RTR(__LINE__, (gres != NULL &&
+ RTR(__LINE__, (gres != nullptr &&
gres->GetClass()->GetClassID() == 2));
delete gres;
}
-
-
int
MyApp::Main()
{
_rc = true;
_cnt = 0;
- search::docsummary::ResultClass *resClass;
+ ResultClass *resClass;
resClass = _config.AddResultClass("c0", 0);
resClass->AddConfigEntry("integer", RES_INT);
@@ -608,12 +418,9 @@ MyApp::Main()
resClass->AddConfigEntry("text", RES_LONG_STRING);
resClass->AddConfigEntry("data", RES_LONG_DATA);
- TestBasic();
TestFailLong();
TestFailShort();
TestFailOrder();
- TestCompress();
- TestCompat();
TestBasicInplace();
TestCompressInplace();
@@ -621,7 +428,6 @@ MyApp::Main()
return (_rc ? 0 : 1);
}
-
int
main(int argc, char **argv)
{
diff --git a/searchsummary/src/tests/docsummary/positionsdfw_test.cpp b/searchsummary/src/tests/docsummary/positionsdfw_test.cpp
index 7497a66d138..764ff4723cb 100644
--- a/searchsummary/src/tests/docsummary/positionsdfw_test.cpp
+++ b/searchsummary/src/tests/docsummary/positionsdfw_test.cpp
@@ -24,8 +24,7 @@ using search::attribute::IAttributeFunctor;
using vespalib::string;
using std::vector;
-namespace search {
-namespace docsummary {
+namespace search::docsummary {
namespace {
@@ -136,7 +135,7 @@ void checkWritePositionField(Test &test, AttrType &attr,
vespalib::Slime target;
vespalib::slime::SlimeInserter inserter(target);
- writer->insertField(doc_id, nullptr, &state, res_type, inserter);
+ writer->insertField(doc_id, &state, res_type, inserter);
vespalib::Memory got = target.get().asString();
test.EXPECT_EQUAL(expected.size(), got.size);
@@ -154,7 +153,6 @@ void Test::requireThat2DPositionFieldIsWritten() {
}
} // namespace
-} // namespace docsummary
-} // namespace search
+}
TEST_APPHOOK(search::docsummary::Test);
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.cpp
index 015eb70c74a..153bcea886f 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.cpp
@@ -90,7 +90,7 @@ StructFields::~StructFields() = default;
}
AttributeCombinerDFW::AttributeCombinerDFW(const vespalib::string &fieldName)
- : IDocsumFieldWriter(),
+ : IDocsumFW(),
_stateIndex(0),
_fieldName(fieldName)
{
@@ -124,11 +124,7 @@ AttributeCombinerDFW::create(const vespalib::string &fieldName, IAttributeManage
}
void
-AttributeCombinerDFW::insertField(uint32_t docid,
- GeneralResult *,
- GetDocsumsState *state,
- ResType,
- vespalib::slime::Inserter &target)
+AttributeCombinerDFW::insertField(uint32_t docid, GetDocsumsState *state, ResType, vespalib::slime::Inserter &target)
{
auto &fieldWriterState = state->_fieldWriterStates[_stateIndex];
if (!fieldWriterState) {
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.h b/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.h
index ef54522a923..e58b0f740bf 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.h
@@ -15,7 +15,7 @@ class DynamicDocsumWriter;
* This class reads values from multiple struct field attributes and
* inserts them as an array of struct or a map of struct.
*/
-class AttributeCombinerDFW : public IDocsumFieldWriter
+class AttributeCombinerDFW : public IDocsumFW
{
protected:
uint32_t _stateIndex;
@@ -28,8 +28,7 @@ public:
bool IsGenerated() const override;
bool setFieldWriterStateIndex(uint32_t fieldWriterStateIndex) override;
static std::unique_ptr<IDocsumFieldWriter> create(const vespalib::string &fieldName, IAttributeManager &attrMgr);
- void insertField(uint32_t docid, GeneralResult *gres, GetDocsumsState *state,
- ResType type, vespalib::slime::Inserter &target) override;
+ void insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target) override;
};
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp
index ee2e9d9fa92..19dd096c46c 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.cpp
@@ -21,6 +21,7 @@ using namespace search;
using search::attribute::IAttributeContext;
using search::attribute::IAttributeVector;
using search::attribute::BasicType;
+using vespalib::slime::Inserter;
namespace search::docsummary {
@@ -42,12 +43,8 @@ public:
SingleAttrDFW(const vespalib::string & attrName) :
AttrDFW(attrName)
{ }
- virtual void insertField(uint32_t docid,
- GeneralResult *gres,
- GetDocsumsState *state,
- ResType type,
- vespalib::slime::Inserter &target) override;
- virtual bool isDefaultValue(uint32_t docid, const GetDocsumsState * state) const override;
+ void insertField(uint32_t docid, GetDocsumsState *state, ResType type, Inserter &target) override;
+ bool isDefaultValue(uint32_t docid, const GetDocsumsState * state) const override;
};
bool SingleAttrDFW::isDefaultValue(uint32_t docid, const GetDocsumsState * state) const
@@ -56,11 +53,7 @@ bool SingleAttrDFW::isDefaultValue(uint32_t docid, const GetDocsumsState * state
}
void
-SingleAttrDFW::insertField(uint32_t docid,
- GeneralResult *,
- GetDocsumsState * state,
- ResType type,
- vespalib::slime::Inserter &target)
+SingleAttrDFW::insertField(uint32_t docid, GetDocsumsState * state, ResType type, Inserter &target)
{
const char *s="";
const IAttributeVector & v = vec(*state);
@@ -80,6 +73,11 @@ SingleAttrDFW::insertField(uint32_t docid,
target.insertLong(val);
break;
}
+ case RES_BOOL: {
+ uint8_t val = v.getInt(docid);
+ target.insertBool(val != 0);
+ break;
+ }
case RES_FLOAT: {
float val = v.getFloat(docid);
target.insertDouble(val);
@@ -141,20 +139,12 @@ class MultiAttrDFW : public AttrDFW
{
public:
MultiAttrDFW(const vespalib::string & attrName) : AttrDFW(attrName) {}
- virtual void insertField(uint32_t docid,
- GeneralResult *gres,
- GetDocsumsState *state,
- ResType type,
- vespalib::slime::Inserter &target) override;
+ void insertField(uint32_t docid, GetDocsumsState *state, ResType type, Inserter &target) override;
};
void
-MultiAttrDFW::insertField(uint32_t docid,
- GeneralResult *,
- GetDocsumsState *state,
- ResType,
- vespalib::slime::Inserter &target)
+MultiAttrDFW::insertField(uint32_t docid, GetDocsumsState *state, ResType, Inserter &target)
{
using vespalib::slime::Cursor;
using vespalib::Memory;
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.h b/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.h
index 643170663b8..d8102734452 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/attributedfw.h
@@ -8,7 +8,7 @@ namespace search::attribute { class IAttributeVector; }
namespace search::docsummary {
-class AttrDFW : public IDocsumFieldWriter
+class AttrDFW : public IDocsumFW
{
private:
vespalib::string _attrName;
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.cpp
index 1eb8399845c..f24f5841bd2 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.cpp
@@ -31,20 +31,14 @@ IDocsumFieldWriter::setFieldWriterStateIndex(uint32_t)
EmptyDFW::EmptyDFW() = default;
-
EmptyDFW::~EmptyDFW() = default;
void
-EmptyDFW::insertField(uint32_t /*docid*/,
- GeneralResult *,
- GetDocsumsState *,
- ResType,
- vespalib::slime::Inserter &target)
+EmptyDFW::insertField(uint32_t, GetDocsumsState *, ResType, vespalib::slime::Inserter &target)
{
// insert explicitly-empty field?
// target.insertNix();
(void)target;
- return;
}
//--------------------------------------------------------------------------
@@ -54,10 +48,8 @@ CopyDFW::CopyDFW()
{
}
-
CopyDFW::~CopyDFW() = default;
-
bool
CopyDFW::Init(const ResultConfig & config, const char *inputField)
{
@@ -85,7 +77,6 @@ CopyDFW::Init(const ResultConfig & config, const char *inputField)
return true;
}
-
void
CopyDFW::insertField(uint32_t /*docid*/, GeneralResult *gres, GetDocsumsState *state, ResType type,
vespalib::slime::Inserter &target)
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.h b/searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.h
index 51079f7736e..870e4fa8d83 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumfieldwriter.h
@@ -16,7 +16,7 @@ class GetDocsumsState;
class IDocsumFieldWriter
{
public:
- typedef std::unique_ptr<IDocsumFieldWriter> UP;
+ using UP = std::unique_ptr<IDocsumFieldWriter>;
IDocsumFieldWriter() : _index(0) { }
virtual ~IDocsumFieldWriter() {}
@@ -27,10 +27,7 @@ public:
{ return ResultConfig::IsRuntimeCompatible(a, b); }
virtual bool IsGenerated() const = 0;
- virtual void insertField(uint32_t docid,
- GeneralResult *gres,
- GetDocsumsState *state,
- ResType type,
+ virtual void insertField(uint32_t docid, GeneralResult *gres, GetDocsumsState *state, ResType type,
vespalib::slime::Inserter &target) = 0;
virtual const vespalib::string & getAttributeName() const { return _empty; }
virtual bool isDefaultValue(uint32_t docid, const GetDocsumsState * state) const {
@@ -46,20 +43,27 @@ private:
static const vespalib::string _empty;
};
+class IDocsumFW : public IDocsumFieldWriter
+{
+public:
+ virtual void insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target) = 0;
+ void insertField(uint32_t docid, GeneralResult *, GetDocsumsState *state, ResType type,
+ vespalib::slime::Inserter &target) override
+ {
+ insertField(docid, state, type, target);
+ }
+};
+
//--------------------------------------------------------------------------
-class EmptyDFW : public IDocsumFieldWriter
+class EmptyDFW : public IDocsumFW
{
public:
EmptyDFW();
- virtual ~EmptyDFW();
-
- virtual bool IsGenerated() const override { return true; }
- virtual void insertField(uint32_t docid,
- GeneralResult *gres,
- GetDocsumsState *state,
- ResType type,
- vespalib::slime::Inserter &target) override;
+ ~EmptyDFW() override;
+
+ bool IsGenerated() const override { return true; }
+ void insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target) override;
};
//--------------------------------------------------------------------------
@@ -71,16 +75,13 @@ private:
public:
CopyDFW();
- virtual ~CopyDFW();
+ ~CopyDFW() override;
bool Init(const ResultConfig & config, const char *inputField);
- virtual bool IsGenerated() const override { return false; }
- virtual void insertField(uint32_t docid,
- GeneralResult *gres,
- GetDocsumsState *state,
- ResType type,
- vespalib::slime::Inserter &target) override;
+ bool IsGenerated() const override { return false; }
+ void insertField(uint32_t docid, GeneralResult *gres, GetDocsumsState *state, ResType type,
+ vespalib::slime::Inserter &target) override;
};
//--------------------------------------------------------------------------
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp
index 72dbddda0b4..a188ab6e60a 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp
@@ -149,7 +149,7 @@ DynamicDocsumWriter::insertDocsum(const ResolveClassInfo & rci, uint32_t docid,
// look up docsum entry
DocsumStoreValue value = docinfos->getMappedDocsum(docid);
// re-pack docsum blob
- GeneralResult gres(rci.inputClass, 0, docid, 0);
+ GeneralResult gres(rci.inputClass);
if (! gres.inplaceUnpack(value)) {
LOG(debug, "Unpack failed: illegal docsum entry for document %d. This is expected during lidspace compaction.", docid);
topInserter.insertNix();
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp
index 4112afc1895..b9177ac8782 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp
@@ -23,7 +23,7 @@ struct ExplicitItemData
uint32_t _weight;
ExplicitItemData()
- : _index(NULL), _indexlen(0), _term(NULL), _termlen(0), _weight(0)
+ : _index(nullptr), _indexlen(0), _term(nullptr), _termlen(0), _weight(0)
{}
ExplicitItemData(const char *index, uint32_t indexlen, const char* term,
@@ -43,19 +43,16 @@ struct QueryItem
{
search::SimpleQueryStackDumpIterator *_si;
const ExplicitItemData *_data;
- QueryItem() : _si(NULL), _data(NULL) {}
- QueryItem(search::SimpleQueryStackDumpIterator *si) : _si(si), _data(NULL) {}
- QueryItem(ExplicitItemData *data) : _si(NULL), _data(data) {}
+ QueryItem() : _si(nullptr), _data(nullptr) {}
+ QueryItem(search::SimpleQueryStackDumpIterator *si) : _si(si), _data(nullptr) {}
+ QueryItem(ExplicitItemData *data) : _si(nullptr), _data(data) {}
private:
QueryItem(const QueryItem&);
QueryItem& operator= (const QueryItem&);
};
-};
-
-namespace search {
-class Property;
+}
-namespace fef {
+namespace search::fef {
class TermVisitor : public IPropertiesVisitor
{
public:
@@ -104,24 +101,22 @@ TermVisitor::visitProperty(const Property::Value &key, const Property &values)
}
-namespace docsummary {
+namespace search::docsummary {
class JuniperQueryAdapter : public juniper::IQuery
{
private:
- JuniperQueryAdapter(const JuniperQueryAdapter&);
- JuniperQueryAdapter operator= (const JuniperQueryAdapter&);
-
KeywordExtractor *_kwExtractor;
const vespalib::stringref _buf;
const search::fef::Properties *_highlightTerms;
juniper::IQueryVisitor *_visitor;
public:
- JuniperQueryAdapter(KeywordExtractor *kwExtractor,
- vespalib::stringref buf,
- const search::fef::Properties *highlightTerms = NULL)
- : _kwExtractor(kwExtractor), _buf(buf), _highlightTerms(highlightTerms), _visitor(NULL) {}
+ JuniperQueryAdapter(const JuniperQueryAdapter&) = delete;
+ JuniperQueryAdapter operator= (const JuniperQueryAdapter&) = delete;
+ JuniperQueryAdapter(KeywordExtractor *kwExtractor, vespalib::stringref buf,
+ const search::fef::Properties *highlightTerms = nullptr)
+ : _kwExtractor(kwExtractor), _buf(buf), _highlightTerms(highlightTerms), _visitor(nullptr) {}
// TODO: put this functionality into the stack dump iterator
bool SkipItem(search::SimpleQueryStackDumpIterator *iterator) const
@@ -136,28 +131,28 @@ public:
return true;
}
- virtual bool Traverse(juniper::IQueryVisitor *v) const override;
+ bool Traverse(juniper::IQueryVisitor *v) const override;
- virtual int Weight(const juniper::QueryItem* item) const override
+ int Weight(const juniper::QueryItem* item) const override
{
- if (item->_si != NULL) {
+ if (item->_si != nullptr) {
return item->_si->GetWeight().percent();
} else {
return item->_data->_weight;
}
}
- virtual juniper::ItemCreator Creator(const juniper::QueryItem* item) const override
+ juniper::ItemCreator Creator(const juniper::QueryItem* item) const override
{
// cast master: Knut Omang
- if (item->_si != NULL) {
+ if (item->_si != nullptr) {
return (juniper::ItemCreator) item->_si->getCreator();
} else {
return juniper::CREA_ORIG;
}
}
- virtual const char *Index(const juniper::QueryItem* item, size_t *len) const override
+ const char *Index(const juniper::QueryItem* item, size_t *len) const override
{
- if (item->_si != NULL) {
+ if (item->_si != nullptr) {
*len = item->_si->getIndexName().size();
return item->_si->getIndexName().data();
} else {
@@ -166,14 +161,14 @@ public:
}
}
- virtual bool UsefulIndex(const juniper::QueryItem* item) const override
+ bool UsefulIndex(const juniper::QueryItem* item) const override
{
vespalib::stringref index;
- if (_kwExtractor == NULL)
+ if (_kwExtractor == nullptr)
return true;
- if (item->_si != NULL) {
+ if (item->_si != nullptr) {
index = item->_si->getIndexName();
} else {
index = vespalib::stringref(item->_data->_index, item->_data->_indexlen);
@@ -182,8 +177,6 @@ public:
}
};
-
-
bool
JuniperQueryAdapter::Traverse(juniper::IQueryVisitor *v) const
{
@@ -308,7 +301,7 @@ JuniperDFW::JuniperDFW(juniper::Juniper * juniper)
}
-JuniperDFW::~JuniperDFW() { }
+JuniperDFW::~JuniperDFW() = default;
bool
JuniperDFW::Init(
@@ -319,10 +312,10 @@ JuniperDFW::Init(
{
bool rc = true;
const util::StringEnum & enums(config.GetFieldNameEnum());
- if (langFieldName != NULL)
+ if (langFieldName != nullptr)
_langFieldEnumValue = enums.Lookup(langFieldName);
_juniperConfig = _juniper->CreateConfig(fieldName);
- if (_juniperConfig.get() == NULL) {
+ if (_juniperConfig.get() == nullptr) {
LOG(warning, "could not create juniper config for field '%s'", fieldName);
rc = false;
}
@@ -350,7 +343,7 @@ JuniperTeaserDFW::Init(
const ResConfigEntry *entry =
it->GetEntry(it->GetIndexFromEnumValue(_inputFieldEnumValue));
- if (entry != NULL &&
+ if (entry != nullptr &&
!IsRuntimeCompatible(entry->_type, RES_STRING) &&
!IsRuntimeCompatible(entry->_type, RES_DATA))
{
@@ -363,15 +356,13 @@ JuniperTeaserDFW::Init(
}
vespalib::string
-DynamicTeaserDFW::makeDynamicTeaser(uint32_t docid,
- GeneralResult *gres,
- GetDocsumsState *state)
+DynamicTeaserDFW::makeDynamicTeaser(uint32_t docid, GeneralResult *gres, GetDocsumsState *state)
{
- if (state->_dynteaser._query == NULL) {
+ if (state->_dynteaser._query == nullptr) {
JuniperQueryAdapter iq(state->_kwExtractor,
state->_args.getStackDump(),
&state->_args.highlightTerms());
- state->_dynteaser._query = _juniper->CreateQueryHandle(iq, NULL);
+ state->_dynteaser._query = _juniper->CreateQueryHandle(iq, nullptr);
}
if (docid != state->_dynteaser._docid ||
@@ -384,34 +375,31 @@ DynamicTeaserDFW::makeDynamicTeaser(uint32_t docid,
_langFieldEnumValue, state->_dynteaser._lang,
(juniper::AnalyseCompatible(_juniperConfig.get(), state->_dynteaser._config) ? "no" : "yes"));
- if (state->_dynteaser._result != NULL)
+ if (state->_dynteaser._result != nullptr)
juniper::ReleaseResult(state->_dynteaser._result);
state->_dynteaser._docid = docid;
state->_dynteaser._input = _inputFieldEnumValue;
state->_dynteaser._lang = _langFieldEnumValue;
state->_dynteaser._config = _juniperConfig.get();
- state->_dynteaser._result = NULL;
+ state->_dynteaser._result = nullptr;
int idx = gres->GetClass()->GetIndexFromEnumValue(_inputFieldEnumValue);
ResEntry *entry = gres->GetEntry(idx);
- if (entry != NULL &&
- state->_dynteaser._query != NULL) {
+ if (entry != nullptr && state->_dynteaser._query != nullptr) {
// obtain Juniper input
const char *buf;
uint32_t buflen;
- entry->_resolve_field(&buf, &buflen,
- &state->_docSumFieldSpace);
+ entry->_resolve_field(&buf, &buflen, &state->_docSumFieldSpace);
if (LOG_WOULD_LOG(spam)) {
std::ostringstream hexDump;
hexDump << vespalib::HexDump(buf, buflen);
LOG(spam, "makeDynamicTeaser: docid=%d, input='%s', hexdump:\n%s",
- docid, std::string(buf, buflen).c_str(),
- hexDump.str().c_str());
+ docid, std::string(buf, buflen).c_str(), hexDump.str().c_str());
}
uint32_t langid = static_cast<uint32_t>(-1);
@@ -422,33 +410,29 @@ DynamicTeaserDFW::makeDynamicTeaser(uint32_t docid,
}
}
- juniper::Summary *teaser = (state->_dynteaser._result != NULL)
+ juniper::Summary *teaser = (state->_dynteaser._result != nullptr)
? juniper::GetTeaser(state->_dynteaser._result, _juniperConfig.get())
- : NULL;
+ : nullptr;
if (LOG_WOULD_LOG(debug)) {
std::ostringstream hexDump;
- if (teaser != NULL) {
+ if (teaser != nullptr) {
hexDump << vespalib::HexDump(teaser->Text(), teaser->Length());
}
LOG(debug, "makeDynamicTeaser: docid=%d, teaser='%s', hexdump:\n%s",
- docid, (teaser != NULL ? std::string(teaser->Text(), teaser->Length()).c_str() : "NULL"),
+ docid, (teaser != nullptr ? std::string(teaser->Text(), teaser->Length()).c_str() : "nullptr"),
hexDump.str().c_str());
}
- if (teaser != NULL) {
- return vespalib::string(teaser->Text(),
- teaser->Length());
+ if (teaser != nullptr) {
+ return vespalib::string(teaser->Text(), teaser->Length());
} else {
return vespalib::string();
}
}
void
-DynamicTeaserDFW::insertField(uint32_t docid,
- GeneralResult *gres,
- GetDocsumsState *state,
- ResType,
+DynamicTeaserDFW::insertField(uint32_t docid, GeneralResult *gres, GetDocsumsState *state, ResType,
vespalib::slime::Inserter &target)
{
vespalib::string teaser = makeDynamicTeaser(docid, gres, state);
@@ -456,6 +440,4 @@ DynamicTeaserDFW::insertField(uint32_t docid,
target.insertString(value);
}
-} // namespace docsummary
-} // namespace search
-
+}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.cpp
index bf010172fa9..ae3d6acde43 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.cpp
@@ -40,8 +40,7 @@ void fmtZcurve(int64_t zval, vespalib::slime::Inserter &target)
}
void
-GeoPositionDFW::insertField(uint32_t docid, GeneralResult *, GetDocsumsState * dsState,
- ResType, vespalib::slime::Inserter &target)
+GeoPositionDFW::insertField(uint32_t docid, GetDocsumsState * dsState, ResType, vespalib::slime::Inserter &target)
{
using vespalib::slime::Cursor;
using vespalib::slime::ObjectSymbolInserter;
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.h b/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.h
index 8f630cde3af..9bd85abaf17 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/geoposdfw.h
@@ -14,8 +14,7 @@ class GeoPositionDFW : public AttrDFW
public:
typedef std::unique_ptr<GeoPositionDFW> UP;
GeoPositionDFW(const vespalib::string & attrName);
- void insertField(uint32_t docid, GeneralResult *gres, GetDocsumsState *state,
- ResType type, vespalib::slime::Inserter &target) override;
+ void insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target) override;
static UP create(const char *attribute_name, IAttributeManager *attribute_manager);
};
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp
index 48e79a5e34c..9c82c00c3ef 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp
@@ -66,8 +66,7 @@ AbsDistanceDFW::findMinDistance(uint32_t docid, GetDocsumsState *state)
}
void
-AbsDistanceDFW::insertField(uint32_t docid, GeneralResult *, GetDocsumsState *state,
- ResType type, vespalib::slime::Inserter &target)
+AbsDistanceDFW::insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target)
{
bool forceEmpty = true;
@@ -166,8 +165,7 @@ formatField(const attribute::IAttributeVector &attribute, uint32_t docid, ResTyp
}
void
-PositionsDFW::insertField(uint32_t docid, GeneralResult *, GetDocsumsState * dsState,
- ResType type, vespalib::slime::Inserter &target)
+PositionsDFW::insertField(uint32_t docid, GetDocsumsState * dsState, ResType type, vespalib::slime::Inserter &target)
{
vespalib::asciistream val(formatField(vec(*dsState), docid, type));
target.insertString(vespalib::Memory(val.c_str(), val.size()));
@@ -175,8 +173,7 @@ PositionsDFW::insertField(uint32_t docid, GeneralResult *, GetDocsumsState * dsS
//--------------------------------------------------------------------------
-PositionsDFW::UP createPositionsDFW(const char *attribute_name,
- IAttributeManager *attribute_manager)
+PositionsDFW::UP createPositionsDFW(const char *attribute_name, IAttributeManager *attribute_manager)
{
PositionsDFW::UP ret;
if (attribute_manager != nullptr) {
@@ -195,12 +192,10 @@ PositionsDFW::UP createPositionsDFW(const char *attribute_name,
return ret;
}
}
- ret.reset(new PositionsDFW(attribute_name));
- return ret;
+ return std::make_unique<PositionsDFW>(attribute_name);
}
-AbsDistanceDFW::UP createAbsDistanceDFW(const char *attribute_name,
- IAttributeManager *attribute_manager)
+AbsDistanceDFW::UP createAbsDistanceDFW(const char *attribute_name, IAttributeManager *attribute_manager)
{
AbsDistanceDFW::UP ret;
if (attribute_manager != nullptr) {
@@ -219,8 +214,7 @@ AbsDistanceDFW::UP createAbsDistanceDFW(const char *attribute_name,
return ret;
}
}
- ret.reset(new AbsDistanceDFW(attribute_name));
- return ret;
+ return std::make_unique<AbsDistanceDFW>(attribute_name);
}
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.h b/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.h
index 69a7ba3f58f..999da6f1860 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.h
@@ -14,7 +14,7 @@ public:
AbsDistanceDFW(const vespalib::string & attrName);
bool IsGenerated() const override { return true; }
- void insertField(uint32_t docid, GeneralResult *gres, GetDocsumsState *state,
+ void insertField(uint32_t docid, GetDocsumsState *state,
ResType type, vespalib::slime::Inserter &target) override;
};
@@ -28,8 +28,7 @@ public:
PositionsDFW(const vespalib::string & attrName);
bool IsGenerated() const override { return true; }
- void insertField(uint32_t docid, GeneralResult *gres, GetDocsumsState *state,
- ResType type, vespalib::slime::Inserter &target) override ;
+ void insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target) override;
};
PositionsDFW::UP createPositionsDFW(const char *attribute_name, IAttributeManager *index_man);
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp
index 9748bdac3b3..a1c96bb3e5b 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.cpp
@@ -20,7 +20,7 @@ RankFeaturesDFW::init(IDocsumEnvironment * env)
}
void
-RankFeaturesDFW::insertField(uint32_t docid, GeneralResult *, GetDocsumsState *state,
+RankFeaturesDFW::insertField(uint32_t docid, GetDocsumsState *state,
ResType type, vespalib::slime::Inserter &target)
{
if (state->_rankFeatures.get() == nullptr) {
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.h b/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.h
index 04ee14c79ca..37790d2f9b8 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/rankfeaturesdfw.h
@@ -19,8 +19,7 @@ public:
~RankFeaturesDFW();
void init(IDocsumEnvironment * env);
bool IsGenerated() const override { return true; }
- void insertField(uint32_t docid, GeneralResult *gres, GetDocsumsState *state,
- ResType type, vespalib::slime::Inserter &target) override;
+ void insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target) override;
};
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp b/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp
index 3758ca27adf..f3834ef4a12 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp
@@ -208,30 +208,5 @@ ResultConfig::GetClassID(const char *buf, uint32_t buflen)
return ret;
}
-urlresult*
-ResultConfig::Unpack(uint32_t partition, uint32_t docid, HitRank metric,
- const char *buf, uint32_t buflen) const
-{
- urlresult *ret = nullptr;
- const ResultClass *resClass = nullptr;
- uint32_t tmp32;
-
- if (buflen >= sizeof(tmp32)) {
- memcpy(&tmp32, buf, sizeof(tmp32));
- buf += sizeof(tmp32);
- buflen -= sizeof(tmp32);
- resClass = LookupResultClass(tmp32);
- }
-
- if (resClass != nullptr && (buflen > 0)) {
- ret = new GeneralResult(resClass, partition, docid, metric);
- if (ret->unpack(buf, buflen) != 0) { // FAIL: unpack
- delete ret;
- ret = nullptr;
- }
- }
-
- return (ret != nullptr) ? ret : new badurlresult(partition, docid, metric);
-}
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.h b/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.h
index f9c8ccbaa40..31218d94e93 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.h
@@ -273,25 +273,6 @@ public:
* @param buflen length of docsum blob.
**/
uint32_t GetClassID(const char *buf, uint32_t buflen);
-
- /**
- * Unpack docsum blob. The first n (0/8/16/32) bits are read from
- * the data given and used to look up the appropriate result
- * class. A GeneralResult object is created based on that
- * class and told to unpack the rest of the docsum blob. If this
- * operation succeeds, the GeneralResult object is
- * returned. It if fails, a badurlresult object is returned
- * instead.
- *
- * @return object representing the unpacked result.
- * @param partition partition path for current hit.
- * @param docid docid for current hit.
- * @param metric relevance estimate for current hit.
- * @param buf docsum blob.
- * @param buflen length of docsum blob.
- **/
- urlresult *
- Unpack(uint32_t partition, uint32_t docid, HitRank metric, const char *buf, uint32_t buflen) const;
};
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp
index 7cf1e65fbc0..9992d782d6e 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp
@@ -12,13 +12,11 @@ namespace search::docsummary {
SummaryFeaturesDFW::SummaryFeaturesDFW() :
- _env(NULL)
+ _env(nullptr)
{
}
-SummaryFeaturesDFW::~SummaryFeaturesDFW()
-{
-}
+SummaryFeaturesDFW::~SummaryFeaturesDFW() = default;
void
SummaryFeaturesDFW::init(IDocsumEnvironment * env)
@@ -30,8 +28,7 @@ static vespalib::string _G_cached("vespa.summaryFeatures.cached");
static vespalib::Memory _M_cached("vespa.summaryFeatures.cached");
void
-SummaryFeaturesDFW::insertField(uint32_t docid, GeneralResult *, GetDocsumsState *state,
- ResType type, vespalib::slime::Inserter &target)
+SummaryFeaturesDFW::insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target)
{
if ( ! state->_summaryFeatures) {
state->_callback.FillSummaryFeatures(state, _env);
@@ -41,7 +38,7 @@ SummaryFeaturesDFW::insertField(uint32_t docid, GeneralResult *, GetDocsumsState
}
const FeatureSet::StringVector &names = state->_summaryFeatures->getNames();
const feature_t *values = state->_summaryFeatures->getFeaturesByDocId(docid);
- if (type == RES_FEATUREDATA && values != NULL) {
+ if (type == RES_FEATUREDATA && values != nullptr) {
vespalib::slime::Cursor& obj = target.insertObject();
for (uint32_t i = 0; i < names.size(); ++i) {
vespalib::Memory name(names[i].c_str(), names[i].size());
@@ -55,7 +52,7 @@ SummaryFeaturesDFW::insertField(uint32_t docid, GeneralResult *, GetDocsumsState
return;
}
vespalib::JSONStringer & json(state->_jsonStringer);
- if (values != NULL) {
+ if (values != nullptr) {
json.clear();
json.beginObject();
for (uint32_t i = 0; i < names.size(); ++i) {
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.h b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.h
index e417e89cf04..f1452d4c0a9 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.h
@@ -10,7 +10,7 @@ namespace search::docsummary {
class IDocsumEnvironment;
-class FeaturesDFW : public IDocsumFieldWriter
+class FeaturesDFW : public IDocsumFW
{
protected:
void featureDump(vespalib::JSONStringer & json, vespalib::stringref name, double feature);
@@ -29,7 +29,7 @@ public:
~SummaryFeaturesDFW() override;
void init(IDocsumEnvironment * env);
bool IsGenerated() const override { return true; }
- void insertField(uint32_t docid, GeneralResult *gres, GetDocsumsState *state,
+ void insertField(uint32_t docid, GetDocsumsState *state,
ResType type, vespalib::slime::Inserter &target) override;
};
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/textextractordfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/textextractordfw.cpp
index 121520c4d03..a0efda07f04 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/textextractordfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/textextractordfw.cpp
@@ -27,16 +27,13 @@ TextExtractorDFW::init(const vespalib::string & fieldName, const vespalib::strin
}
void
-TextExtractorDFW::insertField(uint32_t,
- GeneralResult *gres,
- GetDocsumsState *state,
- ResType,
+TextExtractorDFW::insertField(uint32_t, GeneralResult *gres, GetDocsumsState *state, ResType,
vespalib::slime::Inserter &target)
{
vespalib::string extracted;
ResEntry * entry = gres->GetEntryFromEnumValue(_inputFieldEnum);
- if (entry != NULL) {
- const char * buf = NULL;
+ if (entry != nullptr) {
+ const char * buf = nullptr;
uint32_t buflen = 0;
entry->_resolve_field(&buf, &buflen, &state->_docSumFieldSpace);
// extract the text
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/urlresult.cpp b/searchsummary/src/vespa/searchsummary/docsummary/urlresult.cpp
index 646a167b5a8..074cc1cadf1 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/urlresult.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/urlresult.cpp
@@ -10,43 +10,6 @@ LOG_SETUP(".searchlib.docsummary.urlresult");
namespace search::docsummary {
-urlresult::urlresult(uint32_t partition, uint32_t docid, HitRank metric)
- : _partition(partition),
- _docid(docid),
- _metric(metric)
-{ }
-
-
-urlresult::~urlresult() = default;
-
-
-/*===============================================================*/
-
-
-badurlresult::badurlresult()
- : urlresult(0, 0, 0)
-{ }
-
-
-badurlresult::badurlresult(uint32_t partition, uint32_t docid, HitRank metric)
- : urlresult(partition, docid, metric)
-{ }
-
-
-badurlresult::~badurlresult() = default;
-
-
-int
-badurlresult::unpack(const char *, const size_t )
-{
- LOG(warning, "badurlresult::unpack");
- return 0;
-}
-
-
-/*===============================================================*/
-
-
void
GeneralResult::AllocEntries(uint32_t buflen, bool inplace)
{
@@ -75,7 +38,6 @@ GeneralResult::AllocEntries(uint32_t buflen, bool inplace)
}
}
-
void
GeneralResult::FreeEntries()
{
@@ -92,11 +54,8 @@ GeneralResult::FreeEntries()
free(_entries); // free '_entries'/'_buf' chunk
}
-
-
-GeneralResult::GeneralResult(const ResultClass *resClass, uint32_t partition, uint32_t docid, HitRank metric)
- : urlresult(partition, docid, metric),
- _resClass(resClass),
+GeneralResult::GeneralResult(const ResultClass *resClass)
+ : _resClass(resClass),
_entrycnt(0),
_entries(nullptr),
_buf(nullptr),
@@ -104,27 +63,23 @@ GeneralResult::GeneralResult(const ResultClass *resClass, uint32_t partition, ui
{
}
-
GeneralResult::~GeneralResult()
{
FreeEntries();
}
-
ResEntry *
GeneralResult::GetEntry(uint32_t idx)
{
return (idx < _entrycnt) ? &_entries[idx] : nullptr;
}
-
ResEntry *
GeneralResult::GetEntry(const char *name)
{
int idx = _resClass->GetIndexFromName(name);
- return (idx >= 0 && (uint32_t)idx < _entrycnt) ?
- &_entries[idx] : nullptr;
+ return (idx >= 0 && (uint32_t)idx < _entrycnt) ? &_entries[idx] : nullptr;
}
@@ -132,393 +87,11 @@ ResEntry *
GeneralResult::GetEntryFromEnumValue(uint32_t value)
{
int idx = _resClass->GetIndexFromEnumValue(value);
-
- return (idx >= 0 && (uint32_t)idx < _entrycnt) ?
- &_entries[idx] : nullptr;
+ return (idx >= 0 && (uint32_t)idx < _entrycnt) ? &_entries[idx] : nullptr;
}
-
-int
-GeneralResult::unpack(const char *buf, const size_t buflen)
-{
- bool rc = true;
- const char *ebuf = buf + buflen; // Ref to first after buffer
- const char *p = buf; // current position in buffer
-
- if (_entries != nullptr)
- FreeEntries();
-
- AllocEntries(buflen);
-
- for (uint32_t i = 0; rc && i < _entrycnt; i++) {
- const ResConfigEntry *entry = _resClass->GetEntry(i);
-
- switch (entry->_type) {
-
- case RES_INT: {
-
- if (p + sizeof(_entries[i]._intval) <= ebuf) {
-
- memcpy(&_entries[i]._intval, p, sizeof(_entries[i]._intval));
- _entries[i]._type = RES_INT;
- p += sizeof(_entries[i]._intval);
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + sizeof(..._intval) > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
- break;
- }
-
- case RES_SHORT: {
-
- uint16_t shortval;
- if (p + sizeof(shortval) <= ebuf) {
-
- memcpy(&shortval, p, sizeof(shortval));
- _entries[i]._intval = (uint32_t)shortval;
- _entries[i]._type = RES_INT; // type promotion
- p += sizeof(shortval);
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + sizeof(shortval) > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
- break;
- }
-
- case RES_BOOL:
- case RES_BYTE: {
-
- uint8_t byteval;
- if (p + sizeof(byteval) <= ebuf) {
-
- memcpy(&byteval, p, sizeof(byteval));
- _entries[i]._intval = (uint32_t)byteval;
- _entries[i]._type = RES_INT; // type promotion
- p += sizeof(byteval);
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + sizeof(byteval) > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
- break;
- }
-
- case RES_FLOAT: {
-
- float floatval;
- if (p + sizeof(floatval) <= ebuf) {
-
- memcpy(&floatval, p, sizeof(floatval));
- _entries[i]._doubleval = (double)floatval;
- _entries[i]._type = RES_DOUBLE; // type promotion
- p += sizeof(floatval);
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + sizeof(floatval) > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
- break;
- }
-
- case RES_DOUBLE: {
-
- if (p + sizeof(_entries[i]._doubleval) <= ebuf) {
-
- memcpy(&_entries[i]._doubleval, p, sizeof(_entries[i]._doubleval));
- _entries[i]._type = RES_DOUBLE;
- p += sizeof(_entries[i]._doubleval);
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + sizeof(..._doubleval) > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
- break;
- }
-
- case RES_INT64: {
-
- if (p + sizeof(_entries[i]._int64val) <= ebuf) {
-
- memcpy(&_entries[i]._int64val, p, sizeof(_entries[i]._int64val));
- _entries[i]._type = RES_INT64;
- p += sizeof(_entries[i]._int64val);
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + sizeof(..._int64val) > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
- break;
- }
-
- case RES_STRING: {
-
- uint16_t slen;
- if (p + sizeof(slen) <= ebuf) {
-
- memcpy(&slen, p, sizeof(slen));
- p += sizeof(slen);
-
- if (p + slen <= ebuf) {
-
- _entries[i]._stringval = _buf + (p - buf);
- memcpy(_entries[i]._stringval, p, slen);
- _entries[i]._stringval[slen] = '\0';
- _entries[i]._stringlen = slen;
- _entries[i]._type = RES_STRING;
- p += slen;
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + slen > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + sizeof(slen) > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
- break;
- }
-
- case RES_DATA: {
-
- uint16_t dlen;
- if (p + sizeof(dlen) <= ebuf) {
-
- memcpy(&dlen, p, sizeof(dlen));
- p += sizeof(dlen);
-
- if (p + dlen <= ebuf) {
-
- _entries[i]._dataval = _buf + (p - buf);
- memcpy(_entries[i]._dataval, p, dlen);
- _entries[i]._dataval[dlen] = '\0'; // just in case.
- _entries[i]._datalen = dlen;
- _entries[i]._type = RES_DATA;
- p += dlen;
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + dlen > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + sizeof(dlen) > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
- break;
- }
-
- case RES_XMLSTRING:
- case RES_JSONSTRING:
- case RES_FEATUREDATA:
- case RES_LONG_STRING: {
-
- uint32_t lslen;
- bool compressed;
- if (p + sizeof(lslen) <= ebuf) {
-
- memcpy(&lslen, p, sizeof(lslen));
- p += sizeof(lslen);
-
- compressed = ((lslen & 0x80000000) != 0);
- lslen &= 0x7fffffff;
-
- if (p + lslen <= ebuf) {
-
- if (compressed) { // COMPRESSED
- uint32_t realLen = 0;
- if (lslen >= sizeof(realLen))
- memcpy(&realLen, p, sizeof(realLen));
- else
- LOG(warning, "Cannot uncompress docsum field %s; docsum field meta-data incomplete",
- entry->_bindname.c_str());
- if (realLen > 0) {
- _entries[i]._stringval = new char[realLen + 1];
- }
- if (_entries[i]._stringval != nullptr) {
- uLongf rlen = realLen;
- if ((uncompress((Bytef *)_entries[i]._stringval, &rlen,
- (const Bytef *)(p + sizeof(realLen)),
- lslen - sizeof(realLen)) == Z_OK) &&
- rlen == realLen) {
- assert(rlen == realLen);
-
- // COMPRESSED LONG STRING FIELD OK
- _entries[i]._stringval[realLen] = '\0';
- _entries[i]._stringlen = realLen;
-
- } else {
- LOG(warning, "Cannot uncompress docsum field %s; decompression error",
- entry->_bindname.c_str());
- delete [] _entries[i]._stringval;
- _entries[i]._stringval = nullptr;
- }
- }
- // insert empty field if decompress failed
- if (_entries[i]._stringval == nullptr) {
- _entries[i]._stringval = _buf + (p - buf);
- _entries[i]._stringval[0] = '\0';
- _entries[i]._stringlen = 0;
- }
-
- } else { // UNCOMPRESSED
-
- _entries[i]._stringval = _buf + (p - buf);
- memcpy(_entries[i]._stringval, p, lslen);
- _entries[i]._stringval[lslen] = '\0';
- _entries[i]._stringlen = lslen;
-
- }
- _entries[i]._type = RES_STRING; // type normalization
- p += lslen;
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + lslen > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + sizeof(lslen) > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
- break;
- }
-
- case RES_TENSOR:
- case RES_LONG_DATA: {
-
- uint32_t ldlen;
- bool compressed;
- if (p + sizeof(ldlen) <= ebuf) {
-
- memcpy(&ldlen, p, sizeof(ldlen));
- p += sizeof(ldlen);
-
- compressed = ((ldlen & 0x80000000) != 0);
- ldlen &= 0x7fffffff;
-
- if (p + ldlen <= ebuf) {
-
- if (compressed) { // COMPRESSED
- uint32_t realLen = 0;
- if (ldlen >= sizeof(realLen))
- memcpy(&realLen, p, sizeof(realLen));
- else
- LOG(warning, "Cannot uncompress docsum field %s; docsum field meta-data incomplete",
- entry->_bindname.c_str());
- if (realLen > 0) {
- _entries[i]._dataval = new char [realLen + 1];
- }
- if (_entries[i]._dataval != nullptr) {
- uLongf rlen = realLen;
- if ((uncompress((Bytef *)_entries[i]._dataval, &rlen,
- (const Bytef *)(p + sizeof(realLen)),
- ldlen - sizeof(realLen)) == Z_OK) &&
- rlen == realLen) {
- assert(rlen == realLen);
-
- // COMPRESSED LONG DATA FIELD OK
- _entries[i]._dataval[realLen] = '\0';
- _entries[i]._datalen = realLen;
-
- } else {
- LOG(warning, "Cannot uncompress docsum field %s; decompression error",
- entry->_bindname.c_str());
- delete [] _entries[i]._dataval;
- _entries[i]._dataval = nullptr;
- }
- }
-
- // insert empty field if decompress failed
- if (_entries[i]._dataval == nullptr) {
- _entries[i]._dataval = _buf + (p - buf);
- _entries[i]._dataval[0] = '\0';
- _entries[i]._datalen = 0;
- }
-
- } else { // UNCOMPRESSED
-
- _entries[i]._dataval = _buf + (p - buf);
- memcpy(_entries[i]._dataval, p, ldlen);
- _entries[i]._dataval[ldlen] = '\0'; // just in case
- _entries[i]._datalen = ldlen;
-
- }
- _entries[i]._type = RES_DATA; // type normalization
- p += ldlen;
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + ldlen > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
-
- } else {
-
- LOG(debug, "GeneralResult::unpack: p + sizeof(ldlen) > ebuf");
- LOG(error, "Document summary too short, couldn't unpack");
- rc = false;
- }
- break;
- }
-
- default:
- LOG(warning, "GeneralResult::unpack: no such type:%d", entry->_type);
- LOG(error, "Incorrect type in document summary, couldn't unpack");
- rc = false;
- break;
- } // END -- switch (entry->_type) {
- } // END -- for (uint32_t i = 0; rc && i < _entrycnt; i++) {
-
- if (rc && p != ebuf) {
- LOG(debug, "GeneralResult::unpack: p:%p != ebuf:%p", p, ebuf);
- LOG(error, "Document summary too long, couldn't unpack.");
- rc = false;
- }
-
- if (rc)
- return 0; // SUCCESS
-
- // clean up on failure
- FreeEntries();
- _entrycnt = 0;
- _entries = nullptr;
- _buf = nullptr;
- _bufEnd = nullptr;
-
- return -1; // FAIL
-}
-
-
bool
-GeneralResult::_inplace_unpack(const char *buf, const size_t buflen)
+GeneralResult::unpack(const char *buf, const size_t buflen)
{
bool rc = true;
const char *ebuf = buf + buflen; // Ref to first after buffer
@@ -535,15 +108,11 @@ GeneralResult::_inplace_unpack(const char *buf, const size_t buflen)
switch (entry->_type) {
case RES_INT: {
-
if (p + sizeof(_entries[i]._intval) <= ebuf) {
-
memcpy(&_entries[i]._intval, p, sizeof(_entries[i]._intval));
_entries[i]._type = RES_INT;
p += sizeof(_entries[i]._intval);
-
} else {
-
LOG(debug, "GeneralResult::_inplace_unpack: p + sizeof(..._intval) > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
@@ -552,17 +121,13 @@ GeneralResult::_inplace_unpack(const char *buf, const size_t buflen)
}
case RES_SHORT: {
-
uint16_t shortval;
if (p + sizeof(shortval) <= ebuf) {
-
memcpy(&shortval, p, sizeof(shortval));
_entries[i]._intval = (uint32_t)shortval;
_entries[i]._type = RES_INT; // type promotion
p += sizeof(shortval);
-
} else {
-
LOG(debug, "GeneralResult::_inplace_unpack: p + sizeof(shortval) > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
@@ -571,17 +136,13 @@ GeneralResult::_inplace_unpack(const char *buf, const size_t buflen)
}
case RES_BOOL:
case RES_BYTE: {
-
uint8_t byteval;
if (p + sizeof(byteval) <= ebuf) {
-
memcpy(&byteval, p, sizeof(byteval));
_entries[i]._intval = (uint32_t)byteval;
_entries[i]._type = RES_INT; // type promotion
p += sizeof(byteval);
-
} else {
-
LOG(debug, "GeneralResult::_inplace_unpack: p + sizeof(byteval) > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
@@ -590,17 +151,13 @@ GeneralResult::_inplace_unpack(const char *buf, const size_t buflen)
}
case RES_FLOAT: {
-
float floatval;
if (p + sizeof(floatval) <= ebuf) {
-
memcpy(&floatval, p, sizeof(floatval));
_entries[i]._doubleval = (double)floatval;
_entries[i]._type = RES_DOUBLE; // type promotion
p += sizeof(floatval);
-
} else {
-
LOG(debug, "GeneralResult::unpack: p + sizeof(floatval) > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
@@ -609,15 +166,11 @@ GeneralResult::_inplace_unpack(const char *buf, const size_t buflen)
}
case RES_DOUBLE: {
-
if (p + sizeof(_entries[i]._doubleval) <= ebuf) {
-
memcpy(&_entries[i]._doubleval, p, sizeof(_entries[i]._doubleval));
_entries[i]._type = RES_DOUBLE;
p += sizeof(_entries[i]._doubleval);
-
} else {
-
LOG(debug, "GeneralResult::unpack: p + sizeof(..._doubleval) > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
@@ -626,15 +179,11 @@ GeneralResult::_inplace_unpack(const char *buf, const size_t buflen)
}
case RES_INT64: {
-
if (p + sizeof(_entries[i]._int64val) <= ebuf) {
-
memcpy(&_entries[i]._int64val, p, sizeof(_entries[i]._int64val));
_entries[i]._type = RES_INT64;
p += sizeof(_entries[i]._int64val);
-
} else {
-
LOG(debug, "GeneralResult::unpack: p + sizeof(..._int64val) > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
@@ -643,29 +192,21 @@ GeneralResult::_inplace_unpack(const char *buf, const size_t buflen)
}
case RES_STRING: {
-
uint16_t slen;
if (p + sizeof(slen) <= ebuf) {
-
memcpy(&slen, p, sizeof(slen));
p += sizeof(slen);
-
if (p + slen <= ebuf) {
-
_entries[i]._stringval = const_cast<char *>(p);
_entries[i]._stringlen = slen;
_entries[i]._type = RES_STRING;
p += slen;
-
} else {
-
LOG(debug, "GeneralResult::_inplace_unpack: p + slen > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
}
-
} else {
-
LOG(debug, "GeneralResult::_inplace_unpack: p + sizeof(slen) > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
@@ -674,29 +215,21 @@ GeneralResult::_inplace_unpack(const char *buf, const size_t buflen)
}
case RES_DATA: {
-
uint16_t dlen;
if (p + sizeof(dlen) <= ebuf) {
-
memcpy(&dlen, p, sizeof(dlen));
p += sizeof(dlen);
-
if (p + dlen <= ebuf) {
-
_entries[i]._dataval = const_cast<char *>(p);
_entries[i]._datalen = dlen;
_entries[i]._type = RES_DATA;
p += dlen;
-
} else {
-
LOG(debug, "GeneralResult::_inplace_unpack: p + dlen > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
}
-
} else {
-
LOG(debug, "GeneralResult::_inplace_unpack: p + sizeof(dlen) > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
@@ -708,32 +241,23 @@ GeneralResult::_inplace_unpack(const char *buf, const size_t buflen)
case RES_JSONSTRING:
case RES_FEATUREDATA:
case RES_LONG_STRING: {
-
uint32_t flen;
uint32_t lslen;
if (p + sizeof(flen) <= ebuf) {
-
memcpy(&flen, p, sizeof(flen));
p += sizeof(flen);
-
lslen = flen & 0x7fffffff;
-
if (p + lslen <= ebuf) {
-
_entries[i]._stringval = const_cast<char *>(p);
_entries[i]._stringlen = flen; // with compression flag
_entries[i]._type = RES_STRING; // type normalization
p += lslen;
-
} else {
-
LOG(debug, "GeneralResult::_inplace_unpack: p + lslen > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
}
-
} else {
-
LOG(debug, "GeneralResult::_inplace_unpack: p + sizeof(lslen) > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
@@ -742,32 +266,23 @@ GeneralResult::_inplace_unpack(const char *buf, const size_t buflen)
}
case RES_TENSOR :
case RES_LONG_DATA: {
-
uint32_t flen;
uint32_t ldlen;
if (p + sizeof(flen) <= ebuf) {
-
memcpy(&flen, p, sizeof(flen));
p += sizeof(flen);
-
ldlen = flen & 0x7fffffff;
-
if (p + ldlen <= ebuf) {
-
_entries[i]._dataval = const_cast<char *>(p);
_entries[i]._datalen = flen; // with compression flag
_entries[i]._type = RES_DATA; // type normalization
p += ldlen;
-
} else {
-
LOG(debug, "GeneralResult::_inplace_unpack: p + ldlen > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
}
-
} else {
-
LOG(debug, "GeneralResult::_inplace_unpack: p + sizeof(ldlen) > ebuf");
LOG(error, "Document summary too short, couldn't unpack");
rc = false;
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/urlresult.h b/searchsummary/src/vespa/searchsummary/docsummary/urlresult.h
index 31128c73ca2..a4cdd1b7f69 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/urlresult.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/urlresult.h
@@ -7,37 +7,7 @@
namespace search::docsummary {
-class urlresult
-{
-protected:
- uint32_t _partition;
- uint32_t _docid;
- HitRank _metric;
-
-public:
- urlresult(uint32_t partition, uint32_t docid, HitRank metric);
- virtual ~urlresult();
-
- virtual bool IsGeneral() const { return false; }
- uint32_t GetPartition() const { return _partition; }
- uint32_t GetDocID() const { return _docid; }
- HitRank GetMetric() const { return _metric; }
- virtual int unpack(const char *buf, const size_t buflen) = 0;
-};
-
-
-class badurlresult : public urlresult
-{
-public:
- badurlresult();
- badurlresult(uint32_t partition, uint32_t docid, HitRank metric);
- ~badurlresult() override;
-
- int unpack(const char *buf, const size_t buflen) override;
-};
-
-
-class GeneralResult : public urlresult
+class GeneralResult
{
private:
GeneralResult(const GeneralResult &);
@@ -49,30 +19,27 @@ private:
char *_buf; // allocated in same chunk as _entries
char *_bufEnd; // first byte after _buf
- bool InBuf(void *pt) {
- return ((char *)pt >= _buf &&
- (char *)pt < _bufEnd);
+ bool InBuf(const void *pt) const {
+ return ((const char *)pt >= _buf &&
+ (const char *)pt < _bufEnd);
}
void AllocEntries(uint32_t buflen, bool inplace = false);
void FreeEntries();
- bool _inplace_unpack(const char *buf, const size_t buflen);
-
public:
- GeneralResult(const ResultClass *resClass, uint32_t partition, uint32_t docid, HitRank metric);
+ GeneralResult(const ResultClass *resClass);
~GeneralResult();
const ResultClass *GetClass() const { return _resClass; }
ResEntry *GetEntry(uint32_t idx);
ResEntry *GetEntry(const char *name);
ResEntry *GetEntryFromEnumValue(uint32_t val);
- bool IsGeneral() const override { return true; }
- int unpack(const char *buf, const size_t buflen) override;
+ bool unpack(const char *buf, const size_t buflen);
bool inplaceUnpack(const DocsumStoreValue &value) {
if (value.valid()) {
- return _inplace_unpack(value.fieldsPt(), value.fieldsSz());
+ return unpack(value.fieldsPt(), value.fieldsSz());
} else {
return false;
}
diff --git a/vsm/src/vespa/vsm/vsm/docsumconfig.cpp b/vsm/src/vespa/vsm/vsm/docsumconfig.cpp
index 25c13967c49..ab89f4d460f 100644
--- a/vsm/src/vespa/vsm/vsm/docsumconfig.cpp
+++ b/vsm/src/vespa/vsm/vsm/docsumconfig.cpp
@@ -20,7 +20,7 @@ DynamicDocsumConfig::createFieldWriter(const string & fieldName, const string &
(overrideName == "absdist") ||
(overrideName == "subproject"))
{
- fieldWriter.reset(new EmptyDFW());
+ fieldWriter = std::make_unique<EmptyDFW>();
rc = true;
} else if ((overrideName == "attribute") ||
(overrideName == "attributecombiner") ||