Built motion from commit 44377920.|2.6.11
[motion2.git] / legacy-libs / grpc-cloned / deps / grpc / src / core / lib / surface / completion_queue_factory.cc
1 /*
2  *
3  * Copyright 2017 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18
19 #include <grpc/support/port_platform.h>
20
21 #include "src/core/lib/surface/completion_queue.h"
22 #include "src/core/lib/surface/completion_queue_factory.h"
23
24 #include <grpc/support/log.h>
25
26 /*
27  * == Default completion queue factory implementation ==
28  */
29
30 static grpc_completion_queue* default_create(
31     const grpc_completion_queue_factory* factory,
32     const grpc_completion_queue_attributes* attr) {
33   return grpc_completion_queue_create_internal(
34       attr->cq_completion_type, attr->cq_polling_type, attr->cq_shutdown_cb);
35 }
36
37 static grpc_completion_queue_factory_vtable default_vtable = {default_create};
38
39 static const grpc_completion_queue_factory g_default_cq_factory = {
40     "Default Factory", nullptr, &default_vtable};
41
42 /*
43  * == Completion queue factory APIs
44  */
45
46 const grpc_completion_queue_factory* grpc_completion_queue_factory_lookup(
47     const grpc_completion_queue_attributes* attributes) {
48   GPR_ASSERT(attributes->version >= 1 &&
49              attributes->version <= GRPC_CQ_CURRENT_VERSION);
50
51   /* The default factory can handle version 1 of the attributes structure. We
52      may have to change this as more fields are added to the structure */
53   return &g_default_cq_factory;
54 }
55
56 /*
57  * == Completion queue creation APIs ==
58  */
59
60 grpc_completion_queue* grpc_completion_queue_create_for_next(void* reserved) {
61   GPR_ASSERT(!reserved);
62   grpc_completion_queue_attributes attr = {1, GRPC_CQ_NEXT,
63                                            GRPC_CQ_DEFAULT_POLLING, nullptr};
64   return g_default_cq_factory.vtable->create(&g_default_cq_factory, &attr);
65 }
66
67 grpc_completion_queue* grpc_completion_queue_create_for_pluck(void* reserved) {
68   GPR_ASSERT(!reserved);
69   grpc_completion_queue_attributes attr = {1, GRPC_CQ_PLUCK,
70                                            GRPC_CQ_DEFAULT_POLLING, nullptr};
71   return g_default_cq_factory.vtable->create(&g_default_cq_factory, &attr);
72 }
73
74 grpc_completion_queue* grpc_completion_queue_create_for_callback(
75     grpc_experimental_completion_queue_functor* shutdown_callback,
76     void* reserved) {
77   GPR_ASSERT(!reserved);
78   grpc_completion_queue_attributes attr = {
79       2, GRPC_CQ_CALLBACK, GRPC_CQ_DEFAULT_POLLING, shutdown_callback};
80   return g_default_cq_factory.vtable->create(&g_default_cq_factory, &attr);
81 }
82
83 grpc_completion_queue* grpc_completion_queue_create(
84     const grpc_completion_queue_factory* factory,
85     const grpc_completion_queue_attributes* attr, void* reserved) {
86   GPR_ASSERT(!reserved);
87   return factory->vtable->create(factory, attr);
88 }