blob: f994418b6ae2529715fd170f24657060001d60df [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Wind River Systems - initial API and implementation
*******************************************************************************/
/*
* Double linked list support.
*/
#ifndef D_link
#define D_link
typedef struct LINK LINK;
struct LINK {
LINK * next;
LINK * prev;
};
#define list_init(list) (list)->next = (list)->prev = (list)
#define list_is_empty(list) ((list)->next == (list) && (list)->prev == (list))
#define list_remove(item) (item)->prev->next = (item)->next; \
(item)->next->prev = (item)->prev
#define list_add_first(item,list) (item)->next = (list)->next; (item)->prev = (list); \
(list)->next->prev = (item); (list)->next = (item)
#define list_add_last(item,list) (item)->next = (list); (item)->prev = (list)->prev; \
(list)->prev->next = (item); (list)->prev = (item)
#define list_concat(item,list) if(!list_is_empty(list)) { \
(item)->prev->next = (list)->next; \
(list)->next->prev = (item)->prev; \
(item)->prev = (list)->prev; \
(list)->prev->next = (item); \
}
#endif