template<class Op1, class Op2, class Op3, class Op4, class Op5, class Op6>
class grpc::internal::CallOpSet< Op1, Op2, Op3, Op4, Op5, Op6 >
Primary implementation of CallOpSetInterface.
Since we cannot use variadic templates, we declare slots up to the maximum count of ops we'll need in a set. We leverage the empty base class optimization to slim this class (especially when there are many unused slots used). To avoid duplicate base classes, the template parameter for CallNoOp is varied by argument position.
template<class Op1, class Op2, class Op3, class Op4, class Op5, class Op6>
Get the tag to be used at the core completion queue.
Generally, the value of core_cq_tag will be "this". However, it can be overridden if we want core to process the tag differently (e.g., as a core callback)
Implements grpc::internal::CallOpSetInterface.
template<class Op1, class Op2, class Op3, class Op4, class Op5, class Op6>
FinalizeResult must be called before informing user code that the operation bound to the underlying core completion queue tag has completed.
In practice, this means:
- For the sync API - before returning from Pluck
- For the CQ-based async API - before returning from Next
- For the callback-based API - before invoking the user callback
This is the method that translates from core-side tag/status to C++ API-observable tag/status.
The return value is the status of the operation (returning status is the general behavior of this function). If this function returns false, the tag is dropped and not returned from the completion queue: this concept is for events that are observed at core but not requested by the user application (e.g., server shutdown, for server unimplemented method responses, or for cases where a server-side RPC doesn't have a completion notification registered using AsyncNotifyWhenDone)
Implements grpc::internal::CompletionQueueTag.
template<class Op1, class Op2, class Op3, class Op4, class Op5, class Op6>
set_core_cq_tag is used to provide a different core CQ tag than "this".
This is used for callback-based tags, where the core tag is the core callback function. It does not change the use or behavior of any other function (such as FinalizeResult)