⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hal_llist.h

📁 基于ARM和uC/OS-II实现的串口控制台
💻 H
字号:
#ifndef __HAL_LIST_H__
#define __HAL_LIST_H__


#include "hal_types.h"

/*
 * hal_llist.h 用于链表操作的结构和函数
 *
 * 注意:一个链表如果只包含头结点,则为空链表
 */



typedef struct hal_llist_s hal_llist;

struct hal_llist_s 
{
    hal_llist* next;     /* 指向链表下一结点的指针 */
    hal_llist* previous; /* 指向链表中前一结点的指针 */
};

/*
 * HAL_LLIST_HEAD 用于创建一个新链表的头结点,头结点中的指针被初始化为指向 
 * 头结点本身,从而表明为一个空链表。  
 */

#define HAL_LLIST_HEAD(head) hal_llist head = {&head, &head}

/*
 * hal_llist_insert() 函数将entry作为链表的第一个结点插入到list链表中,
 * 注意:list为链表的头结点,而entry是插入到头结点后面的  
 */

static void hal_llist_insert(hal_llist* list, hal_llist* entry)
{
    entry->previous = list;
    entry->next     = list->next;
    
    list->next->previous = entry;
    list->next           = entry;
}

/*
 * hal_llist_remove() 函数用于将entry结点从它所在的链表中删除
 */
     
static void hal_llist_remove(hal_llist* entry)
{
    entry->next->previous = entry->previous;
    entry->previous->next = entry->next;
    
    /* 
    * 将entry指向其自身, 避免以后误用hal_llist_remove()再次操作entry时会造成的损害
    */
    
    entry->previous = entry;
    entry->next     = entry;
} 

 
#endif /* __HAL_LLIST_H__ */ 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -