annotate base/extended-sequence.lisp @ 330:2fbff655ba47 tip

Removed cpitch-adj and cents SQL columns
author Jeremy Gow <jeremy.gow@gmail.com>
date Mon, 21 Jan 2013 11:08:11 +0000
parents c2e50459efab
children
rev   line source
d@33 1 (cl:in-package #:amuse)
d@33 2
d@33 3 ;; Defines a set of methods for a sequence one of whose slots is the
d@33 4 ;; real sequence (in this case a list). This allows the allocation of
d@33 5 ;; other slots for state information.
d@33 6 ;;
d@33 7 ;; Requires a lisp with extensible lists (Rhodes, User-extensible
d@33 8 ;; Sequences, 2006/7??). Currently, that means SBCL >1.0 only.
d@33 9 ;;
d@33 10 ;; The code here draws heavily on Christophe's examples
d@33 11
d@33 12 (defclass list-slot-sequence (sequence standard-object)
d@33 13 ((%data :accessor %list-slot-sequence-data
j@285 14 :initarg :%data
d@33 15 :initform nil)))
d@33 16
d@33 17 (defmethod sequence:length ((o list-slot-sequence))
d@33 18 (length (%list-slot-sequence-data o)))
d@33 19
d@33 20 (defmethod sequence:elt ((o list-slot-sequence) index)
d@33 21 (elt (%list-slot-sequence-data o) index))
d@33 22
d@33 23 (defmethod (setf sequence:elt) (new-value (o list-slot-sequence) index)
d@33 24 (setf (elt (%list-slot-sequence-data o) index) new-value))
d@33 25
d@33 26 (defmethod sequence:make-sequence-like ((o list-slot-sequence) length
d@33 27 &key (initial-element nil iep)
d@33 28 (initial-contents nil icp))
d@33 29 (let ((result (make-instance (class-of o))))
d@33 30 (cond
d@33 31 ((and iep icp)
d@33 32 (error "Supplied both ~S and ~S to ~S" :initial-element :initial-contents 'make-sequence-like))
d@33 33 (icp
d@33 34 (unless (= (length initial-contents) length)
d@33 35 (error "Length mismatch in ~S" 'make-sequence-like))
d@33 36 (setf (%list-slot-sequence-data result) (coerce initial-contents 'list))
d@33 37 result)
d@33 38 (t
d@33 39 (dotimes (i length result)
d@33 40 (push initial-element (%list-slot-sequence-data result)))))))
d@33 41
d@33 42 (defmethod sequence:adjust-sequence ((o list-slot-sequence) length
d@33 43 &key initial-element
d@33 44 (initial-contents nil icp))
d@33 45 (cond
d@33 46 ((= length 0)
d@33 47 (setf (%list-slot-sequence-data o) nil))
d@33 48 (icp
d@33 49 (setf (%list-slot-sequence-data o)
d@33 50 (sequence:adjust-sequence (%list-slot-sequence-data o)
d@33 51 length
d@33 52 :initial-contents initial-contents)))
d@33 53 (t (setf (%list-slot-sequence-data o)
d@33 54 (sequence:adjust-sequence (%list-slot-sequence-data o)
d@33 55 length
d@33 56 :initial-element initial-element))))
d@33 57 o)
d@33 58
d@33 59 (defmethod sequence:make-simple-sequence-iterator
d@33 60 ((o list-slot-sequence) &rest args &key from-end start end)
d@33 61 (declare (ignore from-end start end))
d@33 62 (apply #'sequence:make-simple-sequence-iterator
d@33 63 (%list-slot-sequence-data o) args))
d@33 64 (defmethod sequence:iterator-step ((o list-slot-sequence) iterator from-end)
d@33 65 (sequence:iterator-step (%list-slot-sequence-data o) iterator from-end))
d@33 66 (defmethod sequence:iterator-endp ((o list-slot-sequence) iterator limit from-end)
d@33 67 (sequence:iterator-endp (%list-slot-sequence-data o) iterator limit from-end))
d@33 68 (defmethod sequence:iterator-element ((o list-slot-sequence) iterator)
d@33 69 (sequence:iterator-element (%list-slot-sequence-data o) iterator))
d@33 70 (defmethod (setf sequence:iterator-element) (new-value (o list-slot-sequence) iterator)
d@33 71 (setf (sequence:iterator-element (%list-slot-sequence-data o) iterator) new-value))
d@33 72 (defmethod sequence:iterator-index ((o list-slot-sequence) iterator)
d@33 73 (sequence:iterator-index (%list-slot-sequence-data o) iterator))
d@33 74 (defmethod sequence:iterator-copy ((o list-slot-sequence) iterator)
j@285 75 (sequence:iterator-copy (%list-slot-sequence-data o) iterator))