Function: icalendar-recur-bysetpos-filter

icalendar-recur-bysetpos-filter is a byte-compiled function defined in icalendar-recur.el.gz.

Signature

(icalendar-recur-bysetpos-filter SETPOS RECURRENCES)

Documentation

Filter RECURRENCES on values for the indices in SETPOS.

SETPOS should be a list of positive or negative integers between -366 and 366, indicating a fixed index in a set of recurrences for *one interval* of a recurrence set, as found in the BYSETPOS=... clause of an icalendar-recur. For example, in a YEARLY recurrence rule with an INTERVAL of 1, the SETPOS represent indices in the recurrence instances generated for a single year.

The returned value is RECURRENCES filtered by index.

Source Code

;; Defined in /usr/src/emacs/lisp/calendar/icalendar-recur.el.gz
(defun icr:bysetpos-filter (setpos recurrences)
  "Filter RECURRENCES on values for the indices in SETPOS.

SETPOS should be a list of positive or negative integers between -366
and 366, indicating a fixed index in a set of recurrences for *one
interval* of a recurrence set, as found in the BYSETPOS=...  clause of
an `icalendar-recur'.  For example, in a YEARLY recurrence rule with an
INTERVAL of 1, the SETPOS represent indices in the recurrence instances
generated for a single year.

The returned value is RECURRENCES filtered by index."
  (let* ((len (length recurrences))
         (keep-indices (mapcar
                        (lambda (pos)
                          ;; sequence indices are 0-based, POS's are 1-based:
                          (if (< pos 0)
                              (+ pos len)
                            (1- pos)))
                        setpos))
         (r nil)
         (i 0)
         (dts recurrences))
    (while dts
      (when (memq i keep-indices)
        (push (car dts) r))
      (incf i)
      (pop dts))
    (nreverse r)))