lnkan |
Table of contents
ProcedureLNKAN ( LNK, allocate node ) SUBROUTINE LNKAN ( POOL, NEW ) AbstractAllocate a node in a doubly linked list pool. Required_ReadingNone. KeywordsLIST DeclarationsIMPLICIT NONE INTEGER LBPOOL PARAMETER ( LBPOOL = -5 ) INTEGER POOL ( 2, LBPOOL : * ) INTEGER NEW Brief_I/OVARIABLE I/O DESCRIPTION -------- --- -------------------------------------------------- POOL I-O A doubly linked list pool. NEW O Number of new node that was allocated. LBPOOL P Lower bound of pool column indices. Detailed_InputPOOL is a doubly linked list pool. Detailed_OutputPOOL is the input pool, with the following modifications: -- NEW is an allocated node: both the forward and backward pointers of NEW are -NEW. -- The node that was the successor of NEW on input is the head of the free list on output. NEW is the number of the newly allocated node. ParametersLBPOOL 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. Exceptions1) If no free nodes are available for allocation, the error SPICE(NOFREENODES) is signaled. FilesNone. ParticularsIn a doubly linked list pool, an `allocated node' is one that has been removed from the free list. An allocated node may be linked to other nodes or may be unlinked; in the latter case, both the forward and backward pointers of the node will be the negative of the node number. A node must be allocated before it can be linked to another node. Examples1) Let POOL be a doubly linked list pool. To build a new list of ten nodes, the code fragment below can be used: C C We'll use LNKILA ( LNK, insert list after C a specified node ) to add nodes to the tail of the C list. C PREV = 0 DO I = 1, 10 CALL LNKAN ( POOL, NODE ) CALL LNKILA ( PREV, NODE, POOL ) PREV = NODE END DO 2) In this version of example (1), we check that a sufficient number of free nodes are available before building the list: C C Make sure we have 10 free nodes available. C Signal an error if not. Use LNKNFN to obtain C the number of free nodes. C IF ( LNKNFN(POOL) .LT. 10 ) THEN CALL SETMSG ( 'Only # free nodes are available '// . 'but 10 are required.' ) CALL ERRINT ( '#', LNKNFN(POOL) ) CALL SIGERR ( 'POOL_TOO_SMALL' ) RETURN END IF [ Build list ] . . . Restrictions1) 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_ReferencesNone. Author_and_InstitutionN.J. Bachman (JPL) J. Diaz del Rio (ODC Space) W.L. Taber (JPL) VersionSPICELIB 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