aboutsummaryrefslogtreecommitdiffstats
path: root/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-08-30 16:10:13 +0200
committerTor Egge <Tor.Egge@online.no>2022-08-30 16:10:13 +0200
commitf51892ec335b49d56f097da12f1138f03a32891d (patch)
tree976969352cdaf702f7f50181a6e91b902add7ac1 /searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp
parent7d6ff13ac8bd0485d30ffd2a979fae3d5fa8d08c (diff)
Use reference to IDocsumEnvironemt instead of pointer.
Diffstat (limited to 'searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp44
1 files changed, 25 insertions, 19 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp
index fdbf9cf169d..cebfac4c86d 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp
@@ -19,7 +19,7 @@ using vespalib::IllegalArgumentException;
namespace search::docsummary {
-DocsumFieldWriterFactory::DocsumFieldWriterFactory(bool use_v8_geo_positions, IDocsumEnvironment* env)
+DocsumFieldWriterFactory::DocsumFieldWriterFactory(bool use_v8_geo_positions, IDocsumEnvironment& env)
: _use_v8_geo_positions(use_v8_geo_positions),
_env(env),
_matching_elems_fields(std::make_shared<MatchingElementsFields>())
@@ -28,6 +28,12 @@ DocsumFieldWriterFactory::DocsumFieldWriterFactory(bool use_v8_geo_positions, ID
DocsumFieldWriterFactory::~DocsumFieldWriterFactory() = default;
+bool
+DocsumFieldWriterFactory::has_attribute_manager() const noexcept
+{
+ return getEnvironment().getAttributeManager() != nullptr;
+}
+
std::unique_ptr<DocsumFieldWriter>
DocsumFieldWriterFactory::create_docsum_field_writer(const vespalib::string& fieldName, const vespalib::string& overrideName, const vespalib::string& argument, bool& rc)
{
@@ -35,7 +41,7 @@ DocsumFieldWriterFactory::create_docsum_field_writer(const vespalib::string& fie
std::unique_ptr<DocsumFieldWriter> fieldWriter;
if (overrideName == "dynamicteaser") {
if ( ! argument.empty() ) {
- auto fw = std::make_unique<DynamicTeaserDFW>(getEnvironment()->getJuniper());
+ auto fw = std::make_unique<DynamicTeaserDFW>(getEnvironment().getJuniper());
auto fw_ptr = fw.get();
fieldWriter = std::move(fw);
rc = fw_ptr->Init(fieldName.c_str(), argument);
@@ -43,10 +49,10 @@ DocsumFieldWriterFactory::create_docsum_field_writer(const vespalib::string& fie
throw IllegalArgumentException("Missing argument");
}
} else if (overrideName == "summaryfeatures") {
- fieldWriter = std::make_unique<SummaryFeaturesDFW>(getEnvironment());
+ fieldWriter = std::make_unique<SummaryFeaturesDFW>();
rc = true;
} else if (overrideName == "rankfeatures") {
- fieldWriter = std::make_unique<RankFeaturesDFW>(getEnvironment());
+ fieldWriter = std::make_unique<RankFeaturesDFW>();
rc = true;
} else if (overrideName == "empty") {
fieldWriter = std::make_unique<EmptyDFW>();
@@ -59,38 +65,38 @@ DocsumFieldWriterFactory::create_docsum_field_writer(const vespalib::string& fie
throw IllegalArgumentException("Missing argument");
}
} else if (overrideName == "absdist") {
- if (getEnvironment()) {
- fieldWriter = AbsDistanceDFW::create(argument.c_str(), getEnvironment()->getAttributeManager());
+ if (has_attribute_manager()) {
+ fieldWriter = AbsDistanceDFW::create(argument.c_str(), getEnvironment().getAttributeManager());
rc = static_cast<bool>(fieldWriter);
}
} else if (overrideName == "positions") {
- if (getEnvironment()) {
- fieldWriter = PositionsDFW::create(argument.c_str(), getEnvironment()->getAttributeManager(), _use_v8_geo_positions);
+ if (has_attribute_manager()) {
+ fieldWriter = PositionsDFW::create(argument.c_str(), getEnvironment().getAttributeManager(), _use_v8_geo_positions);
rc = static_cast<bool>(fieldWriter);
}
} else if (overrideName == "geopos") {
- if (getEnvironment()) {
- fieldWriter = GeoPositionDFW::create(argument.c_str(), getEnvironment()->getAttributeManager(), _use_v8_geo_positions);
+ if (has_attribute_manager()) {
+ fieldWriter = GeoPositionDFW::create(argument.c_str(), getEnvironment().getAttributeManager(), _use_v8_geo_positions);
rc = static_cast<bool>(fieldWriter);
}
} else if (overrideName == "attribute") {
- if (getEnvironment() && getEnvironment()->getAttributeManager()) {
- fieldWriter = AttributeDFWFactory::create(*getEnvironment()->getAttributeManager(), argument);
+ if (has_attribute_manager()) {
+ fieldWriter = AttributeDFWFactory::create(*getEnvironment().getAttributeManager(), argument);
rc = true; // Allow missing attribute vector
}
} else if (overrideName == "attributecombiner") {
- if (getEnvironment() && getEnvironment()->getAttributeManager()) {
- auto attr_ctx = getEnvironment()->getAttributeManager()->createContext();
+ if (has_attribute_manager()) {
+ auto attr_ctx = getEnvironment().getAttributeManager()->createContext();
const vespalib::string& source_field = argument.empty() ? fieldName : argument;
fieldWriter = AttributeCombinerDFW::create(source_field, *attr_ctx, false, std::shared_ptr<MatchingElementsFields>());
rc = static_cast<bool>(fieldWriter);
}
} else if (overrideName == "matchedattributeelementsfilter") {
const vespalib::string& source_field = argument.empty() ? fieldName : argument;
- if (getEnvironment() && getEnvironment()->getAttributeManager()) {
- auto attr_ctx = getEnvironment()->getAttributeManager()->createContext();
+ if (has_attribute_manager()) {
+ auto attr_ctx = getEnvironment().getAttributeManager()->createContext();
if (attr_ctx->getAttribute(source_field) != nullptr) {
- fieldWriter = AttributeDFWFactory::create(*getEnvironment()->getAttributeManager(), source_field, true, _matching_elems_fields);
+ fieldWriter = AttributeDFWFactory::create(*getEnvironment().getAttributeManager(), source_field, true, _matching_elems_fields);
} else {
fieldWriter = AttributeCombinerDFW::create(source_field, *attr_ctx, true, _matching_elems_fields);
}
@@ -98,8 +104,8 @@ DocsumFieldWriterFactory::create_docsum_field_writer(const vespalib::string& fie
}
} else if (overrideName == "matchedelementsfilter") {
const vespalib::string& source_field = argument.empty() ? fieldName : argument;
- if (getEnvironment() && getEnvironment()->getAttributeManager()) {
- auto attr_ctx = getEnvironment()->getAttributeManager()->createContext();
+ if (has_attribute_manager()) {
+ auto attr_ctx = getEnvironment().getAttributeManager()->createContext();
fieldWriter = MatchedElementsFilterDFW::create(source_field,*attr_ctx, _matching_elems_fields);
rc = static_cast<bool>(fieldWriter);
}