/*!
 * @file list.h
 * @brief Declarations for functions that operate on lists.
 */
#ifndef _METERPRETER_COMMON_LIST_H
#define _METERPRETER_COMMON_LIST_H

/*! @brief Container struct for data the lives in a list. */
typedef struct _NODE
{
	struct _NODE * next;  ///< Pointer to the next node in the list.
	struct _NODE * prev;  ///< Pointer to the previous node in the list.
	LPVOID data;          ///< Reference to the data in the list node.
} NODE, *PNODE;

/*! @brief Container structure for a list instance. */
typedef struct _LIST
{
	NODE * start;   ///< Pointer to the first node in the list.
	NODE * end;     ///< Pointer to the last node in the list.
	DWORD count;    ///< Count of elements in the list.
	LOCK * lock;    ///< Reference to the list's synchronisation lock.
} LIST, *PLIST;

typedef BOOL (*PLISTENUMCALLBACK)(LPVOID pState, LPVOID pData);
typedef VOID (*PCLEARFUNC)(LPVOID pData);

#endif