Added an explanatory comment.

This commit is contained in:
Martin Mares 2001-01-15 09:24:16 +00:00
parent 8c6ce98b9d
commit a2d01907c5

View file

@ -9,6 +9,19 @@
#ifndef _BIRD_LISTS_H_ #ifndef _BIRD_LISTS_H_
#define _BIRD_LISTS_H_ #define _BIRD_LISTS_H_
/*
* I admit the list structure is very tricky and also somewhat awkward,
* but it's both efficient and easy to manipulate once one understands the
* basic trick: The list head always contains two synthetic nodes which are
* always present in the list: the head and the tail. But as the `next'
* entry of the tail and the `prev' entry of the head are both NULL, the
* nodes can overlap each other:
*
* head head_node.next
* null head_node.prev tail_node.next
* tail tail_node.prev
*/
typedef struct node { typedef struct node {
struct node *next, *prev; struct node *next, *prev;
} node; } node;