## snl - Generic Single Linked List

### Module Description

The snl module implements a single linked list that can store variable size nodes. It is the base module for more specialized modules, for example the single linked cell list [scl] module.

### Module Words

#### List structure

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

#### List creation, initialisation and destruction

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

#### Member words

snl-length@ ( snl -- u )
  Get the number of nodes in the list
snl-empty? ( snl -- flag )
  Check for an empty list
snl-first@ ( snl -- snn | nil )
  Get the first node from the list
snl-last@ ( snl -- snn | nil )
  Get the last node from the list

#### List words

snl-append ( snn snl -- )
  Append the node snn to the list
snl-prepend ( snn snl -- )
  Prepend the node snn in the list
snl-insert-after ( snn1 snn2 snl -- )
  Insert the node snn1 after the reference node snn2 in the list
snl-remove-first ( snl -- snn | nil )
  Remove the first node from the list, return the removed node
snl-remove-after ( snn1 snl -- snn2 | nil )
  Remove the node after the reference node snn1 from the list, return the removed node

#### Index words

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

#### LIFO words

snl-push ( snn snl -- )
  Push the node snn at the top of the stack [= start of the list]
snl-pop ( snl -- snn | nil )
  Pop the node at the top of the stack [= start of the list], return the popped node
snl-tos ( snl -- snn | nil )
  Get the node at the top of the stack [= start of the list], return this node

#### FIFO words

snl-enqueue ( snn snl -- )
  Enqueue the node snn at the start of the queue [=end of the list]
snl-dequeue ( snl -- snn | nil )
  Dequeue the node at the end of the queue [= start of the list], return this node

#### Special words

snl-execute ( i*x xt snl -- j*x )
  Execute xt for every node in list
snl-execute? ( i*x xt snl -- j*x flag )
  Execute xt for every node in the list until xt returns true
snl-reverse ( snl -- )
  Reverse or mirror the list

#### Inspection

snl-dump ( snl -- )
  Dump the list

generated 03-Jun-2010 by ofcfrth-0.10.0