Re: Функции DDK: InitializeListHead и IsListEmpty
От: vitka Россия  
Дата: 06.02.04 16:05
Оценка:
Здравствуйте, Ignoramus, Вы писали:

I>Господа!


I>Читал DDK, но так и не понял насчет этих списков.


I>Когда я вызываю InitializeListHead, получается, что в списке уже есть один элемент — голова? Что тогда возвратит IsListEmpty? Думаю, что TRUE, ведь я еще не добавлял элементы InsertHeadList или InsertTailList, но ведь все же в списке уже есть головной элемент?


I>Разъясните, плз.


смотрим на структуру LIST_ENTRY
typedef struct _LIST_ENTRY {
   struct _LIST_ENTRY* Flink;
   struct _LIST_ENTRY* Blink;
} LIST_ENTRY;

InitializeListHead, думаю делает следующее
void InitializeListHead( LIST_ENTRY* x )
{
    x->Flink = x;
    x->Blink = x;
}

А IsListEmpty таков
BOOL IsListEmpty( LIST_ENTRY* x )
{
    return ( x->Flink == x->Blink );
}

InsertHeadList или InsertTailList изменяют значения полей Flink и Blink головы соответственно.
Кажись всё
Успехов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.