1 /* 2 * Copyright (C) 2021-2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef QUEUE_H 17 #define QUEUE_H 18 19 #include <stdint.h> 20 #include <stdbool.h> 21 22 #ifdef __cplusplus 23 extern "C" { 24 #endif 25 26 typedef struct Queue Queue; 27 typedef void (*NodeDataFreeCb)(void *data); 28 29 /** 30 * @brief Perform instantiation of the Queue. 31 * 32 * @param capacity Queue's capacity. 33 * @return Succeed return Queue instantiation, failed return NULL. 34 * @since 6 35 */ 36 Queue *QueueCreate(uint32_t capacity); 37 38 /** 39 * @brief Delete instantiation of the Queue. 40 * 41 * @param queue Queue's pointer. 42 * @param cb Free queue node callback. 43 * @since 6 44 */ 45 void QueueDelete(Queue *queue, NodeDataFreeCb cb); 46 47 /** 48 * @brief Enqueue data into Queue. 49 * 50 * @param queue Queue's pointer. 51 * @param data Enqueue data. 52 * @since 6 53 */ 54 void QueueEnqueue(Queue *queue, void *data); 55 56 /** 57 * @brief TryEnqueue data into NonblockQueue. 58 * 59 * @param queue Queue's pointer. 60 * @param data Enqueue data. 61 * @return Success enqueue data return true, else return false. 62 * @since 6 63 */ 64 bool QueueTryEnqueue(Queue *queue, void *data); 65 66 /** 67 * @brief Dequeue data from Queue. 68 * @param queue Queue's pointer. 69 * @return Dequeue data. 70 * @since 6 71 */ 72 void *QueueDequeue(Queue *queue); 73 74 /** 75 * @brief TryDequeue data from NonblockQueue. 76 * 77 * @param queue Queue's pointer. 78 * @return Succeed return data, failed return NULL. 79 * @since 6 80 */ 81 void *QueueTryDequeue(Queue *queue); 82 83 /** 84 * @brief Get Queue EnqueueFd. 85 * 86 * @param queue Queue pointer 87 * @return Succeed return Queue EnqueueFd, failed return -1. 88 * @since 6 89 */ 90 int32_t QueueGetEnqueueFd(const Queue *queue); 91 92 /** 93 * @brief Get Queue DequeueFd. 94 * 95 * @param queue Queue pointer. 96 * @return Succeed return Queue DequeueFd, failed return -1. 97 * @since 6 98 */ 99 int32_t QueueGetDequeueFd(const Queue *queue); 100 101 /** 102 * @brief Flush all data of the queue. 103 * 104 * @param queue Queue pointer. 105 * @param cb Free queue node callback. 106 * @since 6 107 */ 108 void QueueFlush(Queue *queue, NodeDataFreeCb cb); 109 110 /** 111 * @brief Check if the queue is empty. 112 * 113 * @param list Queue pointer. 114 * @return true: The queue is empty. false: The queue is not empty. 115 * @since 6 116 */ 117 bool QueueIsEmpty(Queue *queue); 118 119 /** 120 * @brief Get the size of the queue. 121 * 122 * @param list Queue pointer. 123 * @return The size of the queue. 124 * @since 6 125 */ 126 int32_t QueueGetSize(Queue *queue); 127 128 #ifdef __cplusplus 129 } 130 #endif 131 132 #endif // QUEUE_H