Amulets & Armor  v1.02
Open Source Game
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
Data Structures | Macros | Typedefs | Functions
DBLLINK

Double Linked List. More...

Data Structures

struct  _T_doubleLinkListStruct
 
union  T_dllCountOrData
 

Macros

#define DOUBLE_LINK_LIST_DEAD_TAG   (*((T_word32 *)"DdBl"))
 
#define DOUBLE_LINK_LIST_TAG   (*((T_word32 *)"DbLi"))
 
#define MAX_ALLOCATED_NODES   30000
 

Typedefs

typedef struct
_T_doubleLinkListStruct 
T_doubleLinkListStruct
 

Functions

T_doubleLinkListElement DoubleLinkListAddElementAfterElement (T_doubleLinkListElement element, T_void *p_data)
 
T_doubleLinkListElement DoubleLinkListAddElementAtEnd (T_doubleLinkList linkList, T_void *p_data)
 
T_doubleLinkListElement DoubleLinkListAddElementAtFront (T_doubleLinkList linkList, T_void *p_data)
 
T_doubleLinkListElement DoubleLinkListAddElementBeforeElement (T_doubleLinkListElement element, T_void *p_data)
 
T_doubleLinkList DoubleLinkListCreate (T_void)
 
T_void DoubleLinkListDestroy (T_doubleLinkList linkList)
 
T_void DoubleLinkListDisplay (T_doubleLinkList linkList)
 
T_voidDoubleLinkListElementGetData (T_doubleLinkListElement element)
 
T_doubleLinkListElement DoubleLinkListElementGetNext (T_doubleLinkListElement element)
 
T_doubleLinkListElement DoubleLinkListElementGetPrevious (T_doubleLinkListElement element)
 
T_void DoubleLinkListFreeAndDestroy (T_doubleLinkList *linkList)
 
T_doubleLinkListElement DoubleLinkListGetFirst (T_doubleLinkList linkList)
 
T_doubleLinkListElement DoubleLinkListGetLast (T_doubleLinkList linkList)
 
T_word32 DoubleLinkListGetNumberElements (T_doubleLinkList linkList)
 
T_voidDoubleLinkListRemoveElement (T_doubleLinkListElement element)
 
T_doubleLinkListElement DoubleLinkListTraverse (T_doubleLinkList linkList, T_doubleLinkListTraverseCallback callback)
 
T_void IDumpMaxCount (T_void)
 

Detailed Description

Double Linked List.

In my crazed days, I decided that having a double link list 'class' would be useful and I would no longer have to write this code over and over. Amulets & Armor uses this code for all double linked lists. This version has been optimized to not use malloc and free per node pointer structure.

See Also
http://www.amuletsandarmor.com/AALicense.txt

Macro Definition Documentation

#define DOUBLE_LINK_LIST_DEAD_TAG   (*((T_word32 *)"DdBl"))
#define DOUBLE_LINK_LIST_TAG   (*((T_word32 *)"DbLi"))
#define MAX_ALLOCATED_NODES   30000

Typedef Documentation

Function Documentation

T_doubleLinkListElement DoubleLinkListAddElementAfterElement ( T_doubleLinkListElement  element,
T_void p_data 
)

DoubleLinkListAddElementAfterElement adds a new element after another element in a link list.

Parameters
element– handle of element to go after
p_data– Pointer to element data
T_doubleLinkListElement DoubleLinkListAddElementAtEnd ( T_doubleLinkList  linkList,
T_void p_data 
)

DoubleLinkListAddElementAtEnd appends a new element at the end of the link list.

Parameters
linkList– Handle to link list to append item
p_data– Pointer to element data
T_doubleLinkListElement DoubleLinkListAddElementAtFront ( T_doubleLinkList  linkList,
T_void p_data 
)

DoubleLinkListAddElementAtFront adds a new element at the front of the link list.

Parameters
linkList– Handle to link list to insert item
p_data– Pointer to element data
T_doubleLinkListElement DoubleLinkListAddElementBeforeElement ( T_doubleLinkListElement  element,
T_void p_data 
)

DoubleLinkListAddElementBeforeElement adds a new element before another element in a link list.

Parameters
element– handle of element to go before
p_data– Pointer to element data
T_doubleLinkList DoubleLinkListCreate ( T_void  )
T_void DoubleLinkListDestroy ( T_doubleLinkList  linkList)

DoubleLinkListDestroy goes through a list of double link list nodes and detaches the data with them and then deletes all the nodes.

NOTE: The calling routine must realize that this routine does not deallocate memory attached to a node, it is assumed that the calling routine will do this.

Parameters
linkList– Handle to link list to destroy
T_void DoubleLinkListDisplay ( T_doubleLinkList  linkList)
T_void* DoubleLinkListElementGetData ( T_doubleLinkListElement  element)

DoubleLinkListElementGetData pulls out the data pointer from a double link list element.

Parameters
element– Element to get data out of
Returns
Found data pointer on element
T_doubleLinkListElement DoubleLinkListElementGetNext ( T_doubleLinkListElement  element)

DoubleLinkListElementGetData pulls out the next element from a double link list element.

Parameters
element– Element to get next element
Returns
Next element
T_doubleLinkListElement DoubleLinkListElementGetPrevious ( T_doubleLinkListElement  element)

DoubleLinkListElementGetPrevious pulls out the previous element from a double link list element.

Parameters
element– Element to get previous element
Returns
Previous element
T_void DoubleLinkListFreeAndDestroy ( T_doubleLinkList linkList)

DoubleLinkListFreeAndDestroy goes through a linked list and does a MemFree on each of the data elements and then calls Destroy on the whole list.

Parameters
linkList– Handle to link list to destroy
T_doubleLinkListElement DoubleLinkListGetFirst ( T_doubleLinkList  linkList)

DoubleLinkListGetFirst returns the first element in a double link list.

Parameters
linkList– List to get first
Returns
First element, or DOUBLE_LINK_LIST_ELEMENT_BAD if none.
T_doubleLinkListElement DoubleLinkListGetLast ( T_doubleLinkList  linkList)

DoubleLinkListGetLast returns the last element in a double link list.

Parameters
linkList– List to get last element
Returns
Last element, or DOUBLE_LINK_LIST_ELEMENT_BAD if none.
T_word32 DoubleLinkListGetNumberElements ( T_doubleLinkList  linkList)

DoubleLinkListGetNumberElements returns the number of elements in the given link list.

Parameters
linkList– Link list to get count of
Returns
Number of elements
T_void* DoubleLinkListRemoveElement ( T_doubleLinkListElement  element)

DoubleLinkListRemoveElement removes an element from a link list. This routine also returns the data that was attached to this element.

Parameters
element– removes the element from the list.
Returns
Previously attached node data
T_doubleLinkListElement DoubleLinkListTraverse ( T_doubleLinkList  linkList,
T_doubleLinkListTraverseCallback  callback 
)

DoubleLinkListTraverse travels along the link list and calls the given callback for each of the nodes. In addition, the callback has the choice of aborting the routine. If the traversal stops early that element's handle is returned, else DOUBLE_LINK_LIST_ELEMENT_BAD is returned.

Parameters
linkList– List to traverse
callback– callback to call on each element, returns FALSE to stop traversing.
Returns
Element that traverse stopped on, or DOUBLE_LINK_LIST_ELEMENT_NONE if completed list.
T_void IDumpMaxCount ( T_void  )

DoubleLinkListCreate creates a new double link list and sets up the list to receive new nodes.

Returns
Created double link list.