4G_module/include/platform/cm_linklist.h

212 lines
5.2 KiB
C
Raw Permalink Normal View History

2024-09-02 17:54:29 +08:00
/**
* @file cm_linklist.h
* @brief
* @copyright copyright © 2021 China Mobile IOT. All rights reserved.
* @author by ZXW
* @date 2021/4/28
* @date 2021/6/29,(),by zxw
*/
#ifndef __CM_LINKLIST_H__
#define __CM_LINKLIST_H__
/** 双端链表元素定义*/
typedef struct _linklist_element_t
{
void* content; /*!< 节点内容*/
int size; /*!< content长度*/
struct _linklist_element_t* pre; /*!< 前驱节点*/
struct _linklist_element_t* next; /*!< 后继节点*/
} linklist_element_t;
/** 双端链表结构定义*/
typedef struct {
linklist_element_t* head; /*!< 表头*/
linklist_element_t* tail; /*!< 表尾*/
int count; /*!< 节点个数*/
int size; /*!< 链表占用内存*/
void* mutex; /*!< 互斥锁,用于多线程时链表数据同步*/
} linklist_t;
/**
* \brief content比较方法
*
* \param [in] src_content content
* \param [in] dst_content content
* \return 0
*
* \details More details
*/
typedef int (*linklist_content_compare)(void* src_content, void* dst_content);
/**
* \brief
*
* \return
*
* \details More details
*/
linklist_t* linklist_create(void);
/**
* \brief
*
* \param [in] list
* \param [in] content
* \param [in] size
* \return
*
* \details More details
*/
linklist_element_t* linklist_append_to_tail(linklist_t* list, void* content, int size);
/**
* \brief
*
* \param [in] list
* \param [in] content
* \param [in] size
* \return
*
* \details More details
*/
linklist_element_t* linklist_append_to_head(linklist_t* list, void* content, int size);
/**
* \brief index节点前插入一个节点
*
* \param [in] list
* \param [in] index
* \param [in] content
* \param [in] size
* \return
*
* \details More details
*/
linklist_element_t* linklist_insert_before_index(linklist_t* list, linklist_element_t* index, void* content, int size);
/**
* \brief index节点后插入一个节点
*
* \param [in] list
* \param [in] index
* \param [in] content
* \param [in] size
* \return
*
* \details More details
*/
linklist_element_t* linklist_insert_after_index(linklist_t* list, linklist_element_t* index, void* content, int size);
/**
* \brief
*
* \param [in] list
* \return 0-1
*
* \details More details
*/
int linklist_remove_head(linklist_t* list);
/**
* \brief
*
* \param [in] list
* \return 0-1
*
* \details More details
*/
int linklist_remove_tail(linklist_t* list);
/**
* \brief
*
* \param [in] list
* \return contentNULL
*
* \details More details
*/
void* linklist_pop_head(linklist_t* list);
/**
* \brief
*
* \param [in] list
* \return contentNULL
*
* \details More details
*/
void* linklist_pop_tail(linklist_t* list);
/**
* \brief content对应的节点
*
* \param [in] list
* \param [in] content
* \param [in] cb
* \return 0-1
*
* \details More details
*/
int linklist_remove_content(linklist_t* list, void* content, linklist_content_compare cb);
/**
* \brief
*
* \param [in] list
* \param [in] element
* \return 0-1
*
* \details More details
*/
int linklist_remove_element(linklist_t* list, linklist_element_t* element);
/**
* \brief
*
* \param [in] list
* \param [in] pos
* \return
*
* \details pos传入NULL
*/
linklist_element_t* linklist_next_element(linklist_t* list, linklist_element_t** pos);
/**
* \brief
*
* \param [in] list
* \param [in] pos
* \return
*
* \details pos传入NULL
*/
linklist_element_t* linklist_pre_element(linklist_t* list, linklist_element_t** pos);
/**
* \brief content查找对应的节点
*
* \param [in] list
* \param [in] content
* \param [in] cb
* \return 0-1
*
* \details More details
*/
linklist_element_t* linklist_find_element(linklist_t* list, void* content, linklist_content_compare cb);
/**
* \brief
*
* \param [in] list
* \return None
*
* \details NULL
*/
void linklist_destroy(linklist_t** list);
#endif