Index of Functions: A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X 
Index Page
lnkprv

Table of contents
Procedure
Abstract
Required_Reading
Keywords
Declarations
Brief_I/O
Detailed_Input
Detailed_Output
Parameters
Exceptions
Files
Particulars
Examples
Restrictions
Literature_References
Author_and_Institution
Version

Procedure

     LNKPRV ( LNK, previous node )

     INTEGER FUNCTION LNKPRV ( NODE, POOL )

Abstract

     Find the node preceding a specified node in a doubly linked list
     pool.

Required_Reading

     None.

Keywords

     LIST

Declarations

     IMPLICIT NONE

     INTEGER               LBPOOL
     PARAMETER           ( LBPOOL = -5 )

     INTEGER               POOL ( 2,  LBPOOL : * )
     INTEGER               NODE

Brief_I/O

     VARIABLE  I/O  DESCRIPTION
     --------  ---  --------------------------------------------------
     NODE       I   Number of an allocated node.
     POOL       I   A doubly linked list pool.
     LBPOOL     P   Lower bound of pool column indices.

     The function returns the number of the predecessor of the node
     indicated by NODE.

Detailed_Input

     NODE     is the number of an allocated node in POOL.

     POOL     is a doubly linked list pool.

Detailed_Output

     The function returns the number of the predecessor of the node
     indicated by NODE. If NODE is the head node of a list, the
     function returns the negative of the node number of the tail
     of the list.

Parameters

     LBPOOL   is the lower bound of the column indices of the POOL
              array. The columns indexed LBPOOL to 0 are reserved
              as a control area for the pool.

Exceptions

     1)  If NODE is the head node of a list, the function returns the
         negative of the node number of the tail of the list.

     2)  If NODE is not a valid node number, the error
         SPICE(INVALIDNODE) is signaled. The value 0 is returned.

     3)  If NODE is not the number of an allocated node, the error
         SPICE(UNALLOCATEDNODE) is signaled. The value 0 is returned.

Files

     None.

Particulars

     The raison d'etre of this routine is to allow backward traversal
     of lists in a doubly linked list pool.

     Traversing a list is often performed in cases where the list is
     used to index elements of a data structure, and the elements
     indexed by the list must be searched.

     To traverse a list in forward order, use LNKNXT.

Examples

     1)  Let POOL be doubly linked list pool, and let

           3 <--> 7 <--> 1

         be a list in the pool. The table below shows the effects
         of function references to LNKPRV, where nodes in this list
         are used as inputs:

            Function reference               Value Returned
            ------------------               --------------

            LNKPRV ( 1, POOL )                     7
            LNKPRV ( 7, POOL )                     3
            LNKPRV ( 3, POOL )                    -1


     2)  Backward traversal of a list: Let POOL be a doubly linked
         list pool, and let NODE be an allocated node in the pool.
         To traverse the list containing NODE in backward order
         and print out the nodes of the list, we can use the
         following code fragment:

            C
            C     Find the tail of the list containing NODE.
            C
                  PREV = LNKTL ( NODE, POOL )

            C
            C     Traverse the list, printing out node numbers
            C     as we go.
            C
                  WRITE (*,*) 'The list, in backward order, is: '

                  DO WHILE ( PREV .GT. 0 )

                     WRITE (*,*) PREV
                     PREV = LNKPRV ( PREV, POOL )

                  END DO

Restrictions

     1)  Linked list pools must be initialized via the routine
         LNKINI. Failure to initialize a linked list pool
         will almost certainly lead to confusing results.

Literature_References

     None.

Author_and_Institution

     N.J. Bachman       (JPL)
     J. Diaz del Rio    (ODC Space)
     W.L. Taber         (JPL)

Version

    SPICELIB Version 1.0.1, 24-NOV-2021 (JDR)

        Edited the header to comply with NAIF standard.

    SPICELIB Version 1.0.0, 19-DEC-1995 (NJB) (WLT)
Fri Dec 31 18:36:31 2021