Provided by: golf_601.4.41-1_amd64 bug

NAME

       write-list -  (linked-list)

PURPOSE

       Write key/value pair into a linked list.

SYNTAX

           write-list <list> key <key> \
               value <value> \
               [ append [ <append> ] ]

DESCRIPTION

       write-list  adds  a  pair of key/value strings to the linked <list>, specified with <key> and <value> (in
       "key" and "value" clauses, collectively called an "element").

       The key/value pair is added just prior to the list's current position, thus becoming a current element.

       If "append" clause is used without boolean variable <append>, or if <append> evaluates to true, then  the
       element is added at the end of the list, and the list's current element becomes the newly added one.

EXAMPLES

       Add a key/value pair to the end of the list:

           new-list mylist
           write-list mylist key "mykey" value "myvalue" append

       The  following  is a list that is process-scoped, i.e. it is a linked-list server, which can add, delete,
       read and position to various elements:

           %% /llsrv public
               // Create linked list just once for the life of the process
               do-once
               new-list t process-scope
               end-do-once

               // Get input parameters
               get-param op
               get-param key
               get-param data

               if-true op equal "add" // Add data to list
                   // Make a copy of key,data so they are Golf-allocated
                   write-list t key (key) value data append
                   @Added [<<print-out key>>] value [<<print-out data>>]

               else-if op equal "delete" // Delete first data and obtain the value deleted
                   position-list t first
                   read-list t key (key) value val status st
                   if-true st equal GG_ERR_EXIST
                       @Not found
                   else-if
                       // If found, then delete key and value
                       @Deleted key [<<print-out key>>], [<<print-out val>>]
                       delete-list t
                   end-if

               else-if op equal "next" // Position to next element
                   position-list t next status st
                   if-true st equal GG_OKAY
                       @Okay
                   else-if
                       @Not found
                   end-if

               else-if op equal "last" // Position to last element
                   position-list t last status st
                   if-true st equal GG_OKAY
                       @Okay
                   else-if
                       @Not found
                   end-if

               else-if op equal "previous" // Position to element
                   position-list t previous status st
                   if-true st equal GG_OKAY
                       @Okay
                   else-if
                       @Not found
                   end-if

               else-if op equal "first" // Get first element
                   position-list t first status st
                   if-true st equal GG_OKAY
                       @Okay
                   else-if
                       @Not found
                   end-if

               else-if op equal "query" // Get current element
                   read-list t key (key) value val status st
                   if-true st equal GG_ERR_EXIST
                       @Not found
                   else-if
                       @Key [<<print-out key>>], value [<<print-out val>>]
                   end-if

               else-if op equal "purge" // remove all, keep the list
                   purge-list t
               end-if
           %%

       Create application:

           sudo mgrg -i -u $(whoami) linkserver

       Start the server:

           mgrg -w 1 linkserver

       Try it out:

           gg -r --req="/llsrv/op=add/key=1/data=1" --exec --service
           gg -r --req="/llsrv/op=add/key=2/data=2" --exec --service
           gg -r --req="/llsrv/op=query" --exec --service
           gg -r --req="/llsrv/op=previous" --exec --service
           gg -r --req="/llsrv/op=query" --exec --service

SEE ALSO

        Linked list

       delete-list get-list new-list position-list purge-list read-list write-list See all documentation

$DATE                                               $VERSION                                           GOLF(2gg)