dnl - Generic Double Linked List

Module Description

The dnl module implements a double linked list that can handle variable size nodes. It is the base module for more specialized modules, for example the double linked cell list [dcl] module.

Module Words

List structure

dnl% ( -- n )
Get the required space for a dnl variable

List creation, initialisation and destruction

dnl-init ( dnl -- )
Initialise the list
dnl-(free) ( xt dnl -- )
Free the nodes in the list from the heap using xt
dnl-create ( "<spaces>name" -- ; -- dnl )
Create a named dnl list in the dictionary
dnl-new ( -- dnl )
Create a new dnl list on the heap
dnl-free ( dnl -- )
Free the list from the heap

Member words

dnl-length@ ( dnl -- u )
Get the number of nodes in the list
dnl-empty? ( dnl -- flag )
Check for empty list
dnl-first@ ( dnl -- dnn | nil )
Get the first node in the list
dnl-last@ ( dnl -- dnn | nil )
Get the last node in the list

List words

dnl-append ( dnn dnl -- )
Append the node dnn in the list
dnl-prepend ( dnn dnl -- )
Prepend the node dnn in the list
dnl-insert-before ( dnn1 dnn2 dnl -- )
Insert the new node dnn1 before the reference node dnn2 in the list
dnl-insert-after ( dnn1 dnn2 dnl -- )
Insert the new node dnn1 after the reference node dnn2 in the list
dnl-remove ( dnn dnl -- )
Remove the node dnn from the list

Index words

dnl-index? ( n dnl -- flag )
Check if the index n is valid in the list
dnl-get ( n dnl -- dnn )
Get the nth node from the list
dnl-insert ( dnn n dnl -- )
Insert the node dnn before the nth node in the list
dnl-delete ( n dnl -- dnn )
Delete the nth node from the list, return the deleted node

LIFO words

dnl-push ( dnn dnl -- )
Push the node dnn at the end of the list
dnl-pop ( dnl -- dnn | nil )
Pop the node dnn from the end of the list
dnl-tos ( dnl -- dnn | nil )
Get the node dnn from the end of the list

FIFO words

dnl-enqueue ( dnn dnl -- )
Enqueue the node dnn at the start of the list
dnl-dequeue ( dnl -- dnn | nil )
Dequeue the node dnn from the end of the list

Special words

dnl-execute ( i*x xt dnl -- j*x )
Execute xt for every node in list
dnl-reverse ( dnl -- )
Reverse or mirror the list

Inspection

dnl-dump ( dnl -- )
Dump the list

generated 03-Jun-2010 by ofcfrth-0.10.0