mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
67 lines
2.0 KiB
C
67 lines
2.0 KiB
C
/*
|
|
* @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_ */
|