1 /* 2 * Copyright (c) 2016-2017 Nordic Semiconductor ASA 3 * Copyright (c) 2016 Vinayak Kariappa Chettimada 4 * 5 * SPDX-License-Identifier: Apache-2.0 6 */ 7 8 /** 9 * @brief Element of a memory-queue 10 * @details Elements form a linked list, and as payload carries a pointer 11 */ 12 struct _memq_link { 13 struct _memq_link *next; /* permit chaining */ 14 void *mem; /* payload */ 15 }; 16 17 typedef struct _memq_link memq_link_t; 18 19 #define MEMQ_DECLARE(name) \ 20 struct { \ 21 memq_link_t *head; \ 22 memq_link_t *tail; \ 23 } memq_##name 24 25 memq_link_t *memq_init(memq_link_t *link, memq_link_t **head, 26 memq_link_t **tail); 27 28 #define MEMQ_INIT(name, link) \ 29 memq_init(link, &memq_##name.head, &memq_##name.tail) 30 31 memq_link_t *memq_deinit(memq_link_t **head, memq_link_t **tail); 32 memq_link_t *memq_enqueue(memq_link_t *link, void *mem, memq_link_t **tail); 33 memq_link_t *memq_peek(memq_link_t *head, memq_link_t *tail, void **mem); 34 memq_link_t *memq_peek_n(memq_link_t *head, memq_link_t *tail, uint8_t n, 35 void **mem); 36 memq_link_t *memq_dequeue(memq_link_t *tail, memq_link_t **head, void **mem); 37