12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- * @Author: jiejie
- * @Github: https://github.com/jiejieTop
- * @Date: 2019-12-11 22:47:55
- * @LastEditTime: 2020-10-17 14:18:02
- * @Description: the code belongs to jiejie, please keep the author information and source code according to the license.
- */
- #ifndef _MQTT_LIST_H_
- #define _MQTT_LIST_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- typedef struct mqtt_list_node {
- struct mqtt_list_node *next;
- struct mqtt_list_node *prev;
- } mqtt_list_t;
- #define OFFSET_OF_FIELD(type, field) \
- ((size_t)&(((type *)0)->field))
- #define CONTAINER_OF_FIELD(ptr, type, field) \
- ((type *)((unsigned char *)(ptr) - OFFSET_OF_FIELD(type, field)))
- #define LIST_NODE(node) \
- { &(node), &(node) }
- #define LIST_DEFINE(list) \
- mqtt_list_t list = { &(list), &(list) }
- #define LIST_ENTRY(list, type, field) \
- CONTAINER_OF_FIELD(list, type, field)
- #define LIST_FIRST_ENTRY(list, type, field) \
- LIST_ENTRY((list)->next, type, field)
- #define LIST_FIRST_ENTRY_OR_NULL(list, type, field) \
- (mqtt_list_is_empty(list) ? NULL : LIST_FIRST_ENTRY(list, type, field))
- #define LIST_FOR_EACH(curr, list) \
- for (curr = (list)->next; curr != (list); curr = curr->next)
- #define LIST_FOR_EACH_PREV(curr, list) \
- for (curr = (list)->prev; curr != (list); curr = curr->prev)
- #define LIST_FOR_EACH_SAFE(curr, next, list) \
- for (curr = (list)->next, next = curr->next; curr != (list); \
- curr = next, next = curr->next)
- #define LIST_FOR_EACH_PREV_SAFE(curr, next, list) \
- for (curr = (list)->prev, next = curr->prev; \
- curr != (list); \
- curr = next, next = curr->prev)
- void mqtt_list_init(mqtt_list_t *list);
- void mqtt_list_add(mqtt_list_t *node, mqtt_list_t *list);
- void mqtt_list_add_tail(mqtt_list_t *node, mqtt_list_t *list);
- void mqtt_list_del(mqtt_list_t *entry);
- void mqtt_list_del_init(mqtt_list_t *entry);
- void mqtt_list_move(mqtt_list_t *node, mqtt_list_t *list);
- void mqtt_list_move_tail(mqtt_list_t *node, mqtt_list_t *list);
- int mqtt_list_is_empty(mqtt_list_t *list);
- #ifdef __cplusplus
- }
- #endif
- #endif /* _LIST_H_ */
|