sort_findings

sefun
SYNOPSIS
    mapping sort_findings (mixed data, void|closure pred)

DESCRIPTION
    Sort the <data> computed by a call to searchm(), mainly flattening
    the found objects into one or more neat lists.

    Default behaviour is to return all FOUND_SINGLE objects, the first
    FOUND_CLASS object of each class, all uncounted FOUND_MULTI
    objects and as much counted FOUND_MULTI objects as the parsed
    count specified.

    Result is a mapping of integer keys with at least these entries
    (which could be 0):

      int     result[-FOUND_SINGLE]
        Non-zero if the <data> contained counted plural objects, where
        the specified count was larger than the objects found.

      string *result[FOUND_IDS]
	The id-string for which no object could be located.

      object *result[FOUND_SINGLE]
	The array of objects found and considered.

      int     result[FOUND_SPECS]
        How much distinct object specifications have been processed
        successfully.

    <pred> is a closure which determines how a given obj from <data>
    should be considered:

	int <pred>(object obj, int type, int left, int count)

    <obj> is the object to analyze, <type> one of FOUND_SINGLE,
    FOUND_CLASS and FOUND_MULTI, depending on <obj>s match-type.
    <left> and <count> are specified for FOUND_CLASS objects only and
    show the number of objects from this class left to analyze, and
    how much of the objects analyzed so far have been included into
    the result.

    Result of the <pred> call is an integer to be used as index into
    the result mapping. Predefined results are 0 (to omit the object
    from the result mapping) and FOUND_SINGLE (to include the object
    into the associated field). Own result values may start from
    FOUND_FREE upwards.
    If the result value is negative, the object will be included as
    if the value would be positive, but for counted FOUND_MULTI
    objects the internal counter will not be changed.

    For convenience, the <pred> may also be specified as non-zero
    integer, if all objects shall be treated equal.

    System-provided predicate closures are:

  closure sort_f_default(...)

    Default <pred>icate is this simulated efun, which returns
    FOUND_SINGLE for the first FOUND_CLASS object of each class, and
    for every other object as well.

  closure sort_f_std(..., closure extra)

    This <pred>icate works as sort_f_default(), except that includes
    exactly one object of a FOUND_CLASS.
    Additionally, it calls <extra>(<object>) for each accepted object
    and examines the result. If the result from that call is a closure,
    it calls this closure with <object> as argument and uses the result
    from that call. If the end result is non-zero, the returned object
    is classified as FOUND_NOTHANDLE instead of FOUND_SINGLE.

  closure sort_f_prop (string prop)
  closure sort_f_nprop (string prop)

    This simulate efun constructs a <pred>icate, which combines
    sort_f_std() together with a query of each checked objects
    property <prop>.
    If the property is non-zero (resp. zero for sort_f_nprop), the
    object is classified as FOUND_NOTHANDLE.

SEE ALSO
    search(C), foundp(SEFUN), search(SEFUN), searchm(SEFUN)