• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  * Copyright 2015 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 #ifndef GRPC_CORE_LIB_IOMGR_POLLING_ENTITY_H
20 #define GRPC_CORE_LIB_IOMGR_POLLING_ENTITY_H
21 
22 #include <grpc/support/port_platform.h>
23 
24 #include "src/core/lib/iomgr/pollset.h"
25 #include "src/core/lib/iomgr/pollset_set.h"
26 
27 typedef enum grpc_pollset_tag {
28   GRPC_POLLS_NONE,
29   GRPC_POLLS_POLLSET,
30   GRPC_POLLS_POLLSET_SET
31 } grpc_pollset_tag;
32 
33 /* A grpc_polling_entity is a pollset-or-pollset_set container. It allows
34  * functions that accept a pollset XOR a pollset_set to do so through an
35  * abstract interface. No ownership is taken. */
36 
37 typedef struct grpc_polling_entity {
38   union {
39     grpc_pollset* pollset;
40     grpc_pollset_set* pollset_set;
41   } pollent;
42   grpc_pollset_tag tag;
43 } grpc_polling_entity;
44 
45 grpc_polling_entity grpc_polling_entity_create_from_pollset_set(
46     grpc_pollset_set* pollset_set);
47 grpc_polling_entity grpc_polling_entity_create_from_pollset(
48     grpc_pollset* pollset);
49 
50 /** If \a pollent contains a pollset, return it. Otherwise, return NULL */
51 grpc_pollset* grpc_polling_entity_pollset(grpc_polling_entity* pollent);
52 
53 /** If \a pollent contains a pollset_set, return it. Otherwise, return NULL */
54 grpc_pollset_set* grpc_polling_entity_pollset_set(grpc_polling_entity* pollent);
55 
56 bool grpc_polling_entity_is_empty(const grpc_polling_entity* pollent);
57 
58 /** Add the pollset or pollset_set in \a pollent to the destination pollset_set
59  * \a * pss_dst */
60 void grpc_polling_entity_add_to_pollset_set(grpc_polling_entity* pollent,
61                                             grpc_pollset_set* pss_dst);
62 
63 /** Delete the pollset or pollset_set in \a pollent from the destination
64  * pollset_set \a * pss_dst */
65 void grpc_polling_entity_del_from_pollset_set(grpc_polling_entity* pollent,
66                                               grpc_pollset_set* pss_dst);
67 
68 #endif /* GRPC_CORE_LIB_IOMGR_POLLING_ENTITY_H */
69