these unused includes were identifier by clang-include-cleaner. after auditing these source files, all of the reports have been confirmed. please note, because quite a few source files relied on `utils/to_string.hh` to pull in the specialization of `fmt::formatter<std::optional<T>>`, after removing `#include <fmt/std.h>` from `utils/to_string.hh`, we have to include `fmt/std.h` directly. Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
52 lines
1.4 KiB
C++
52 lines
1.4 KiB
C++
/*
|
|
* Copyright (C) 2018-present ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <seastar/core/loop.hh>
|
|
#include <seastar/util/noncopyable_function.hh>
|
|
|
|
#include "seastarx.hh"
|
|
|
|
namespace utils {
|
|
|
|
// Represents a deferring operation which defers cooperatively with the caller.
|
|
//
|
|
// The operation is started and resumed by calling run(), which returns
|
|
// with stop_iteration::no whenever the operation defers and is not completed yet.
|
|
// When the operation is finally complete, run() returns with stop_iteration::yes.
|
|
// After that, run() should not be invoked any more.
|
|
//
|
|
// This allows the caller to:
|
|
// 1) execute some post-defer and pre-resume actions atomically
|
|
// 2) have control over when the operation is resumed and in which context,
|
|
// in particular the caller can cancel the operation at deferring points.
|
|
//
|
|
// One simple way to drive the operation to completion:
|
|
//
|
|
// coroutine c;
|
|
// while (c.run() == stop_iteartion::no) {}
|
|
//
|
|
class coroutine final {
|
|
public:
|
|
coroutine() = default;
|
|
coroutine(noncopyable_function<stop_iteration()> f) : _run(std::move(f)) {}
|
|
stop_iteration run() { return _run(); }
|
|
explicit operator bool() const { return bool(_run); }
|
|
private:
|
|
noncopyable_function<stop_iteration()> _run;
|
|
};
|
|
|
|
// Makes a coroutine which does nothing.
|
|
inline
|
|
coroutine make_empty_coroutine() {
|
|
return coroutine([] { return stop_iteration::yes; });
|
|
}
|
|
|
|
}
|