diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-01-26 11:12:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-26 11:12:06 +0100 |
commit | 7037114ffd41ba92c98a323bf65b7e5655258269 (patch) | |
tree | 8426b126720a23ebdcfabe44bf430585f20034d6 | |
parent | 33fe36bb2c5fc9ef1bcd763493e392464cf541b6 (diff) | |
parent | aa4ab9c8971d73fefc81bf76920c5f7c61561769 (diff) |
Merge pull request #16221 from vespa-engine/balder/lambda-over-closure-4
closure -> lambda
3 files changed, 33 insertions, 43 deletions
diff --git a/searchcorespi/src/vespa/searchcorespi/flush/closureflushtask.h b/searchcorespi/src/vespa/searchcorespi/flush/closureflushtask.h deleted file mode 100644 index 8d35a07806e..00000000000 --- a/searchcorespi/src/vespa/searchcorespi/flush/closureflushtask.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#pragma once - -#include "flushtask.h" -#include <vespa/vespalib/util/closure.h> - -namespace searchcorespi { - -class ClosureFlushTask : public FlushTask -{ - std::unique_ptr<vespalib::Closure> _closure; - search::SerialNum _flushSerial; - -public: - ClosureFlushTask(std::unique_ptr<vespalib::Closure> closure, - search::SerialNum flushSerial) - : _closure(std::move(closure)), - _flushSerial(flushSerial) - { - } - - search::SerialNum getFlushSerial() const override { - return _flushSerial; - } - - void run() override { - _closure->call(); - } -}; - -/** - * Wraps a Closure as a FlushTask - **/ -static inline FlushTask::UP -makeFlushTask(std::unique_ptr<vespalib::Closure> closure, - search::SerialNum flushSerial) -{ - return FlushTask::UP(new ClosureFlushTask(std::move(closure), flushSerial)); -} - -} // namespace searchcorespi diff --git a/searchcorespi/src/vespa/searchcorespi/flush/lambdaflushtask.h b/searchcorespi/src/vespa/searchcorespi/flush/lambdaflushtask.h new file mode 100644 index 00000000000..fc860a4292f --- /dev/null +++ b/searchcorespi/src/vespa/searchcorespi/flush/lambdaflushtask.h @@ -0,0 +1,31 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#pragma once + +#include "flushtask.h" + +namespace searchcorespi { + +template <class FunctionType> +class LambdaFlushTask : public FlushTask { + FunctionType _func; + search::SerialNum _flushSerial; + +public: + LambdaFlushTask(FunctionType &&func, search::SerialNum flushSerial) + : _func(std::move(func)), + _flushSerial(flushSerial) + {} + ~LambdaFlushTask() override = default; + search::SerialNum getFlushSerial() const override { return _flushSerial; } + void run() override { _func(); } +}; + +template <class FunctionType> +std::unique_ptr<FlushTask> +makeLambdaFlushTask(FunctionType &&function, search::SerialNum flushSerial) +{ + return std::make_unique<LambdaFlushTask<std::decay_t<FunctionType>>> + (std::forward<FunctionType>(function), flushSerial); +} + +} diff --git a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp index b8bc4832202..348dbc97f25 100644 --- a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp +++ b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp @@ -9,7 +9,7 @@ #include "indexreadutilities.h" #include "indexwriteutilities.h" #include <vespa/fastos/file.h> -#include <vespa/searchcorespi/flush/closureflushtask.h> +#include <vespa/searchcorespi/flush/lambdaflushtask.h> #include <vespa/searchlib/common/i_flush_token.h> #include <vespa/searchlib/index/schemautil.h> #include <vespa/searchlib/util/dirtraverse.h> @@ -960,7 +960,7 @@ IndexMaintainer::initFlush(SerialNum serialNum, searchcorespi::FlushStats * stat return FlushTask::UP(); } SerialNum realSerialNum = args.flush_serial_num; - return makeFlushTask(makeClosure(this, &IndexMaintainer::doFlush, std::move(args)), realSerialNum); + return makeLambdaFlushTask([this, myargs=std::move(args)]() mutable { doFlush(std::move(myargs)); }, realSerialNum); } FusionSpec |