include/libtu/dlist.h

Wed, 28 May 2003 23:48:16 +0200

author
tuomov
date
Wed, 28 May 2003 23:48:16 +0200
changeset 53
f8f9366b359c
parent 43
aad48c3d4966
child 56
af2c6d224f9d
permissions
-rw-r--r--

trunk: changeset 57
License changed to Artistic/LGPL dual license.

/*
 * libtu/common.h
 *
 * Copyright (c) Tuomo Valkonen 1999-2002. 
 *
 * You may distribute and modify this library under the terms of either
 * the Clarified Artistic License or the GNU LGPL, version 2.1 or later.
 */

#ifndef LIBTU_DLIST_H
#define LIBTU_DLIST_H

#define LINK_ITEM(LIST, ITEM, NEXT, PREV) \
	(ITEM)->NEXT=NULL;                    \
	if((LIST)==NULL){                     \
		(LIST)=(ITEM);                    \
		(ITEM)->PREV=(ITEM);              \
	}else{                                \
		(ITEM)->PREV=(LIST)->PREV;        \
		(ITEM)->PREV->NEXT=(ITEM);        \
		(LIST)->PREV=(ITEM);              \
	}


#define LINK_ITEM_FIRST(LIST, ITEM, NEXT, PREV) \
	(ITEM)->NEXT=(LIST);                        \
	if((LIST)==NULL){                           \
		(ITEM)->PREV=(ITEM);                    \
	}else{                                      \
		(ITEM)->PREV=(LIST)->PREV;              \
		(LIST)->PREV=(ITEM);                    \
	}                                           \
	(LIST)=(ITEM);


#define LINK_ITEM_LIST LINK_ITEM


#define LINK_ITEM_BEFORE(LIST, BEFORE, ITEM, NEXT, PREV) \
	(ITEM)->NEXT=(BEFORE);                               \
	(ITEM)->PREV=(BEFORE)->PREV;                         \
	(BEFORE)->PREV=(ITEM);                               \
	if((BEFORE)==(LIST))                                 \
		(LIST)=(ITEM);                                   \
	else                                                 \
		(ITEM)->PREV->NEXT=(ITEM)


#define LINK_ITEM_AFTER(LIST, AFTER, ITEM, NEXT, PREV) \
	(ITEM)->NEXT=(AFTER)->NEXT;                        \
	(ITEM)->PREV=(AFTER);                              \
	(AFTER)->NEXT=(ITEM);                              \
	if((ITEM)->NEXT==NULL)                             \
		(LIST)->PREV=(ITEM);                           \
	else                                               \
		(ITEM)->NEXT->PREV=ITEM;


#define UNLINK_ITEM(LIST, ITEM, NEXT, PREV) \
	if((ITEM)==(LIST)){                     \
		(LIST)=(ITEM)->NEXT;                \
		if((LIST)!=NULL)                    \
			(LIST)->PREV=(ITEM)->PREV;      \
	}else if((ITEM)->NEXT==NULL){           \
		(ITEM)->PREV->NEXT=NULL;            \
		(LIST)->PREV=(ITEM)->PREV;          \
	}else{                                  \
		(ITEM)->PREV->NEXT=(ITEM)->NEXT;    \
		(ITEM)->NEXT->PREV=(ITEM)->PREV;    \
	}                                       \
	(ITEM)->NEXT=NULL;                      \
	(ITEM)->PREV=NULL;

#endif /* LIBTU_DLIST_H */

mercurial