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
