aboutsummaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-01-21 12:23:47 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-01-21 12:30:27 +0000
commit350ef35c38f276354991ad1444f5500d07b57802 (patch)
tree9db68b138ea32e5cadb8cd049bd8b0aa52311a1d /vespalib
parent29970d8a10da432c379bdcdecc96ab01c751dc83 (diff)
Add DummyBucketExecutor for use in testing.
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/vespa/vespalib/util/destructor_callbacks.h29
1 files changed, 25 insertions, 4 deletions
diff --git a/vespalib/src/vespa/vespalib/util/destructor_callbacks.h b/vespalib/src/vespa/vespalib/util/destructor_callbacks.h
index fc0d23fa177..211105127cf 100644
--- a/vespalib/src/vespa/vespalib/util/destructor_callbacks.h
+++ b/vespalib/src/vespa/vespalib/util/destructor_callbacks.h
@@ -8,25 +8,46 @@ namespace vespalib {
class Gate;
-class GateCallback : public vespalib::IDestructorCallback {
+class GateCallback : public IDestructorCallback {
public:
- GateCallback(vespalib::Gate & gate) noexcept : _gate(gate) {}
+ explicit GateCallback(vespalib::Gate & gate) noexcept : _gate(gate) {}
~GateCallback() override;
private:
vespalib::Gate & _gate;
};
-class IgnoreCallback : public vespalib::IDestructorCallback {
+class IgnoreCallback : public IDestructorCallback {
public:
IgnoreCallback() noexcept { }
~IgnoreCallback() override = default;
};
template <typename T>
-struct KeepAlive : public vespalib::IDestructorCallback {
+struct KeepAlive : public IDestructorCallback {
explicit KeepAlive(T toKeep) noexcept : _toKeep(std::move(toKeep)) { }
~KeepAlive() override = default;
T _toKeep;
};
+template<class FunctionType>
+class LambdaCallback : public IDestructorCallback {
+public:
+ explicit LambdaCallback(FunctionType &&func) noexcept
+ : _func(std::move(func))
+ {}
+ ~LambdaCallback() {
+ _func();
+ }
+private:
+ FunctionType _func;
+};
+
+template<class FunctionType>
+std::shared_ptr<IDestructorCallback>
+makeLambdaCallback(FunctionType &&function) {
+ return std::make_shared<LambdaCallback<std::decay_t<FunctionType>>>
+ (std::forward<FunctionType>(function));
+}
+
+
}