BlenderDev/DoubleLinkedList

Wikipedia,自由的百科全书

数据结构,listbase 是list的头和尾

代码:

/* dynamicaly allocated dat structures has to include next and prev pointers */

typedef struct Link

{ struct Link *next,*prev;

} Link;


/* ListBase points at the first and last pointer in dynamic list */

typedef struct ListBase

{ void *first, *last;

} ListBase




操作函数


代码:

void addlisttolist(ListBase *list1, ListBase *list2);

void BLI_insertlink(struct ListBase *listbase, void *vprevlink, void *vnewlink);

void * BLI_findlink(struct ListBase *listbase, int number);

void BLI_freelistN(struct ListBase *listbase);

void BLI_addtail(struct ListBase *listbase, void *vlink);

void BLI_remlink(struct ListBase *listbase, void *vlink);

void BLI_addhead(struct ListBase *listbase, void *vlink);

void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink);

void BLI_freelist(struct ListBase *listbase);

int BLI_countlist(struct ListBase *listbase);

void BLI_freelinkN(struct ListBase *listbase, void *vlink);



释放内存:

两种分配方式,两种释放方法:

BLI_freelist(ListBase listbase) is used, when all items are allocated with malloc() function.


BLI_freelistN(ListBase listbase) is used, when all items are allocated with MEM_mallocN() function


写如.blend文件


代码:

static void write_myitems(WriteData *wd, ListBase *lb)

{ item = lb->first;

while(item){ writestruct(wd, DATA, "MyItem", 1, item); item = item->next; }

}



从.blend中读取

代码:


FileData *fd;

ListBase *lb;

link_list(fd, lb);




详细说明 :http://mediawiki.blender.org/index.php/BlenderDev/DoubleLinkedList

Personal tools