summaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/memoryindex/remove_task.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'searchlib/src/vespa/searchlib/memoryindex/remove_task.cpp')
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/remove_task.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/memoryindex/remove_task.cpp b/searchlib/src/vespa/searchlib/memoryindex/remove_task.cpp
new file mode 100644
index 00000000000..d19abd50274
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/memoryindex/remove_task.cpp
@@ -0,0 +1,44 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "remove_task.h"
+#include "document_inverter_context.h"
+#include "field_inverter.h"
+#include "invert_context.h"
+#include "url_field_inverter.h"
+
+namespace search::memoryindex {
+
+namespace {
+
+template <typename Inverter>
+void remove_documents(Inverter& inverter, const std::vector<uint32_t>& lids)
+{
+ for (auto lid : lids) {
+ inverter.removeDocument(lid);
+ }
+}
+
+}
+
+RemoveTask::RemoveTask(const InvertContext& context, const std::vector<std::unique_ptr<FieldInverter>>& inverters, const std::vector<std::unique_ptr<UrlFieldInverter>>& uri_inverters, const std::vector<uint32_t>& lids)
+ : _context(context),
+ _inverters(inverters),
+ _uri_inverters(uri_inverters),
+ _lids(lids)
+{
+}
+
+RemoveTask::~RemoveTask() = default;
+
+void
+RemoveTask::run()
+{
+ for (auto field_id : _context.get_fields()) {
+ remove_documents(*_inverters[field_id], _lids);
+ }
+ for (auto uri_field_id : _context.get_uri_fields()) {
+ remove_documents(*_uri_inverters[uri_field_id], _lids);
+ }
+}
+
+}