mirror of
https://github.com/NixOS/nix.git
synced 2025-11-28 21:21:00 +01:00
LambdaSink: Allow passing a destructor callback
This commit is contained in:
parent
d1470f76c7
commit
d7b6afecdb
1 changed files with 14 additions and 5 deletions
|
|
@ -447,18 +447,27 @@ struct LengthSource : Source
|
||||||
*/
|
*/
|
||||||
struct LambdaSink : Sink
|
struct LambdaSink : Sink
|
||||||
{
|
{
|
||||||
typedef std::function<void(std::string_view data)> lambda_t;
|
typedef std::function<void(std::string_view data)> data_t;
|
||||||
|
typedef std::function<void()> cleanup_t;
|
||||||
|
|
||||||
lambda_t lambda;
|
data_t dataFun;
|
||||||
|
cleanup_t cleanupFun;
|
||||||
|
|
||||||
LambdaSink(const lambda_t & lambda)
|
LambdaSink(
|
||||||
: lambda(lambda)
|
const data_t & dataFun, const cleanup_t & cleanupFun = []() {})
|
||||||
|
: dataFun(dataFun)
|
||||||
|
, cleanupFun(cleanupFun)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~LambdaSink()
|
||||||
|
{
|
||||||
|
cleanupFun();
|
||||||
|
}
|
||||||
|
|
||||||
void operator()(std::string_view data) override
|
void operator()(std::string_view data) override
|
||||||
{
|
{
|
||||||
lambda(data);
|
dataFun(data);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue