26 asyncWork.work.template bind<AsyncZLibTransformStreamT, &AsyncZLibTransformStreamT::work>(*
this);
27 asyncWork.callback.template bind<AsyncZLibTransformStreamT, &AsyncZLibTransformStreamT::afterWork>(*
this);
32 typename T_AsyncEventLoop::LoopWork asyncWork;
34 void setEventLoop(T_AsyncEventLoop& loop) { eventLoop = &loop; }
37 T_AsyncEventLoop* eventLoop =
nullptr;
39 virtual Result onProcess(Span<const char> input, Span<char> output)
override
41 SC_ASYNC_STREAMS_ASSERT_RELEASE(not finalizing);
45 if (eventLoop ==
nullptr)
46 return Result::Error(AsyncStreamsResultCategory, AsyncStreamsError::AsyncEventLoopMissing);
47 return asyncWork.start(*eventLoop);
50 virtual Result onFinalize(Span<char> output)
override
55 if (eventLoop ==
nullptr)
56 return Result::Error(AsyncStreamsResultCategory, AsyncStreamsError::AsyncEventLoopMissing);
57 return asyncWork.start(*eventLoop);
60 void afterWork(
typename T_AsyncEventLoop::LoopWork::Result&)
64 AsyncTransformStream::afterFinalize(savedOutput, streamEnded);
68 AsyncTransformStream::afterProcess(savedInput, savedOutput);
74 return finalizing ? stream.finalize(savedOutput, streamEnded) : stream.process(savedInput, savedOutput);
77 bool finalizing =
false;
78 bool streamEnded =
false;
80 Span<const char> savedInput;
81 Span<char> savedOutput;