list from linux by dgod

转载 2004年08月26日 17:59:00

/*********************************************************
    Something simplified from linux source code. this work
is done by dgod.
    Use this list functions, you should support c99 or ++.
To use this, include this file.
 If your compiler don't support, rewrite the micro of
foreach, if just no change to the list move the new
parameter n, else you shuld have n to define outside the
for loop and give the foreach more param
**********************************************************/

#ifndef _LIST_H_
#define _LIST_H_

typedef struct node{
    struct node *prev,*next;
}node,*pnode; 

#define offsetof(type,member) ((int)&(((type*)0)->member))
   
#define list_entry(ptr,type,member) (/
     (type*)/
     ((char*)(ptr)-offsetof(type,member))/
         )

static inline void list_init(pnode n)
{
    n->prev=n->next=n;
}

static inline void __list_add(pnode n,pnode prev,pnode next)
{
    next->prev=n;
    prev->next=n;
    n->next=next;
    n->prev=prev;
}

static inline void list_add(pnode n,pnode head)
{
    __list_add(n,head,head->next);
}

static inline void list_add_tail(pnode n,pnode head)
{
    __list_add(n,head->prev,head);
}

static inline void __list_del(pnode prev,pnode next)
{
    prev->next=next;
    next->prev=prev;
}

static inline void list_del(pnode n)
{
    __list_del(n->prev,n->next);
    list_init(n);
}

static inline void list_move(pnode n,pnode head)
{
    __list_del(n->prev,n->next);
    list_add(n,head);
}

static inline void list_move_tail(pnode n,pnode head)
{
    __list_del(n->prev,n->next);
    list_add_tail(n,head);

static inline int list_empty(pnode head)
{
    return head==head->next;
}

static inline void __list_splice(pnode list,pnode head)
{
 node *first = list->next;
 node *last = list->prev;
 node *at = head->next;

 first->prev = head;
 head->next = first;

 last->next = at;
 at->prev = last;
}

static inline void list_splice(pnode list,pnode head)
{
    if(!list_empty(list))
    {
     __list_splice(list,head);
     list_init(list);
    }   
}

#define foreach(pos,head) /
  for(node *n=pos=(head)->next;n=n->next,pos!=(head);pos=n)

#endif //_LIST_H_

Select From List 下拉列表框定位

以下是我整理了最近用到的2个关键字:(后续用上其他几个,再陆续补充上来) Select From List By Value的用法: Name:  Select From List By Va...
  • hapasm
  • hapasm
  • 2016年12月12日 15:52
  • 1057

java 泛型应用

本来以为自己已经极懂泛型
  • Yoara
  • Yoara
  • 2014年09月01日 18:16
  • 2627

Form中实现动态List

转自:http://www.cnblogs.com/benio/archive/2010/11/28/1890343.html 在FORM开发中,经常会使用到下拉列表,Item的List子类,一般情...
  • zhanzhib
  • zhanzhib
  • 2015年05月08日 13:03
  • 715

Form表单传递List数组属性到后台对象中

第一层属性的List后台有一个对象 User ,结构如下:public class User{ private String username; private List photo; ..get ....
  • q383965374
  • q383965374
  • 2017年05月04日 21:23
  • 3871

linux内核中的list

本文详细分析了 3.4.112 内核中链表结构的实现,并通过图像和实例进行了详尽的讲解。...
  • qqliyunpeng
  • qqliyunpeng
  • 2016年12月26日 20:56
  • 913

linux内核list模块的使用

List模块是linux内核提供的循环链表函数集,头文件是:。 主要数据结构: struct list_head { struct list_head *next, *prev; }; 这是...
  • liuruiqun
  • liuruiqun
  • 2015年07月16日 15:35
  • 1311

如何做一个应用程序的快捷方式入口

最近在做一个桌面的快捷方式入口
  • konan1027
  • konan1027
  • 2014年05月16日 09:36
  • 776

【LeetCode-面试算法经典-Java实现】【019-Remove Nth Node From End of List(移除单链表的倒数第N个节点)】

【019-Remove Nth Node From End of List(移除单链表的倒数第N个节点)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a l...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月22日 07:24
  • 2055

在ibatis中使用Dynamic SQL时property属性的用法

--- Cause: com.ibatis.common.beans.ProbeException: Error getting ordinal list from JavaBean. Cause j...
  • lywybo
  • lywybo
  • 2013年06月13日 18:47
  • 3402

完美解决hibernatetool oracle注释问题

我的模板工具一直不能完美的将oracle的注释生成到我的代码中, 失眠时解决了这个问题,记录下供大家参考 不知道是不是我的hibernatetool比较旧有这个问题 配置hibernatetoo...
  • wang102010
  • wang102010
  • 2013年06月04日 02:18
  • 2201
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:list from linux by dgod
举报原因:
原因补充:

(最多只允许输入30个字)