Provided by: ion-doc_3.2.1+dfsg-1.1_all bug

NAME

       sdrlist - Simple Data Recorder list management functions

SYNOPSIS

           #include "sdr.h"

           typedef int (*SdrListCompareFn)(Sdr sdr, Address eltData, void *argData);
           typedef void (*SdrListDeleteFn)(Sdr sdr, Object elt, void *argument);

           [see description for available functions]

DESCRIPTION

       The SDR list management functions manage doubly-linked lists in managed SDR heap space.  The functions
       manage two kinds of objects: lists and list elements.  A list knows how many elements it contains and
       what its start and end elements are.  An element knows what list it belongs to and the elements before
       and after it in the list.  An element also knows its content, which is normally the SDR Address of some
       object in the SDR heap.  A list may be sorted, which speeds the process of searching for a particular
       element.

       Object sdr_list_create(Sdr sdr)
           Creates  a  new  list  object  in  the  SDR; the new list object initially contains no list elements.
           Returns the address of the new list, or zero on any error.

       void sdr_list_destroy(Sdr sdr, Object list, SdrListDeleteFn fn, void *arg)
           Destroys a list, freeing all elements of list.  If fn is non-NULL, that function is called  once  for
           each freed element; when called, fn is passed the Address that is the element's data and the argument
           pointer passed to sdr_list_destroy().

           Do  not  use  sdr_free to destroy an SDR list, as this would leave the elements of the list allocated
           yet unreferenced.

       int sdr_list_length(Sdr sdr, Object list)
           Returns the number of elements in the list, or -1 on any error.

       void sdr_list_user_data_set(Sdr sdr, Object list, Address userData)
           Sets the "user data" word of list to userData.  Note that userData is nominally an Address but can in
           fact be any value that occupies a single word.  It is typically used to point to an SDR  object  that
           somehow characterizes the list as a whole, such as a name.

       Address  sdr_list_user_data(Sdr sdr, Object list)
           Returns the value of the "user data" word of list, or zero on any error.

       Object sdr_list_insert(Sdr sdr, Object list, Address data, SdrListCompareFn fn, void *dataBuffer)
           Creates a new list element whose data value is data and inserts that element into the list.  If fn is
           NULL,  the  new  list  element  is  simply  appended  to the list; otherwise, the new list element is
           inserted after the last element in the list whose data value is "less than  or  equal  to"  the  data
           value  of  the  new  element  (in  dataBuffer) according to the collating sequence established by fn.
           Returns the address of the newly created element, or zero on any error.

       Object sdr_list_insert_first(Sdr sdr, Object list, Address data)
       Object sdr_list_insert_last(Sdr sdr, Object list, Address data)
           Creates a new element and inserts it at the front/end of the list.  This function should not be  used
           to insert a new element into any ordered list; use sdr_list_insert() instead.  Returns the address of
           the newly created list element on success, or zero on any error.

       Object sdr_list_insert_before(Sdr sdr, Object elt, Address data)
       Object sdr_list_insert_after(Sdr sdr, Object elt, Address data)
           Creates  a  new element and inserts it before/after the specified list element.  This function should
           not be used to insert a new element into any ordered list; use  sdr_list_insert()  instead.   Returns
           the address of the newly created list element, or zero on any error.

       void sdr_list_delete(Sdr sdr, Object elt, SdrListDeleteFn fn, void *arg)
           Delete  elt from the list it is in.  If fn is non-NULL, that function will be called upon deletion of
           elt; when called, that function is passed the Address that is the list element's data value  and  the
           arg pointer passed to sdr_list_delete().

       Object sdr_list_first(Sdr sdr, Object list)
       Object sdr_list_last(Sdr sdr, Object list)
           Returns the address of the first/last element of list, or zero on any error.

       Object sdr_list_next(Sdr sdr, Object elt)
       Object sdr_list_prev(Sdr sdr, Object elt)
           Returns  the  address  of  the element following/preceding elt in that element's list, or zero on any
           error.

       Object sdr_list_search(Sdr sdr, Object elt, int reverse, SdrListCompareFn fn, void *dataBuffer);
           Search a list for an element whose data matches the data in dataBuffer,  starting  at  the  indicated
           initial  list  element.  If the compare function is non-NULL, the list is assumed to be sorted in the
           order implied by that function and the function is automatically called once for each element of  the
           list  until  it  returns a value that is greater than or equal to zero (where zero indicates an exact
           match and a value greater than zero indicates that the list contains no matching element); each  time
           compare  is called it is passed the Address that is the element's data value and the dataBuffer value
           passed to sm_list_search().  If reverse is non-zero, then the  list  is  searched  in  reverse  order
           (starting  at  the  indicated  initial list element) and the search ends when compare returns a value
           that is less than or equal to zero.  If compare is NULL, then the entire list is searched (in  either
           forward  or  reverse  order,  as  directed)  until an element is located whose data value is equal to
           ((Address) dataBuffer).  Returns the address of the matching element if one is found, 0 otherwise.

       Object sdr_list_list(Sdr sdr, Object elt)
           Returns the address of the list to which elt belongs, or 0 on any error.

       Address sdr_list_data(Sdr sdr, Object elt)
           Returns the Address that is the data value of elt, or 0 on any error.

       Address sdr_list_data_set(Sdr sdr, Object elt, Address data)
           Sets the data value for elt to data, replacing the original value.  Returns the original  data  value
           for  elt, or 0 on any error.  The original data value for elt may or may not have been the address of
           an object in heap data space; even if it was, that object was NOT deleted.

           Warning: changing the data value of an element of an ordered list may ruin the ordering of the list.

USAGE

       When inserting elements or searching a list, the user may optionally provide a compare  function  of  the
       form:

           int user_comp_name(Sdr sdr, Address eltData, void *dataBuffer);

       When  provided,  this  function  is  automatically called by the sdrlist function being invoked; when the
       function is called it is passed the content of a list element (eltData, nominally the Address of an  item
       in  the  SDR's heap space) and an argument, dataBuffer, which is nominally the address in local memory of
       some other item in the same format.  The user-supplied function normally compares some key values of  the
       two  data  items  and  returns 0 if they are equal, an integer less than 0 if eltData's key value is less
       than that of dataBuffer, and an integer greater than 0 if eltData's key value is  greater  than  that  of
       dataBuffer.  These return values will produce a list in ascending order.  If the user desires the list to
       be in descending order, the function must reverse the signs of these return values.

       When  deleting  an element or destroying a list, the user may optionally provide a delete function of the
       form:

           void user_delete_name(Sdr sdr, Address eltData, void *argData)

       When provided, this function is automatically called by the sdrlist  function  being  invoked;  when  the
       function  is called it is passed the content of a list element (eltData, nominally the Address of an item
       in the SDR's heap space) and an argument, argData, which if non-NULL is normally  the  address  in  local
       memory  of  a  data  item  providing  context  for the list element deletion.  The user-supplied function
       performs any application-specific cleanup associated with deleting  the  element,  such  as  freeing  the
       element's content data item and/or other SDR heap space associated with the element.

SEE ALSO

       lyst(3), sdr(3), sdrstring(3), sdrtable(3), smlist(3)

perl v5.24.1                                       2016-07-07                         ici::doc::pod3::sdrlist(3)