changeset 288:d1e5bbcc5ea4

Rationalise base and geerdes classes, constructors and methods. Ignore-this: d9d4d88566a6d110844d91d4c70513cd Towards a more standardised interface. Some of these changes (generalised constructors and reader functions) are necessary for amuse-database-admin functionality and some other CHARM-like things. darcs-hash:20090716154406-16a00-8a9b4fb1fc1f5ba75af66a1bbd87e1bb68e02493.gz
author j.forth <j.forth@gold.ac.uk>
date Thu, 16 Jul 2009 16:44:06 +0100
parents 00d35eb70ef9
children 2519652145c3
files base/classes.lisp base/package.lisp implementations/geerdes/classes.lisp implementations/geerdes/constructors.lisp implementations/geerdes/methods.lisp
diffstat 5 files changed, 97 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/base/classes.lisp	Thu Jul 16 15:58:07 2009 +0100
+++ b/base/classes.lisp	Thu Jul 16 16:44:06 2009 +0100
@@ -8,12 +8,18 @@
 
 (defclass identifier (amuse-object) ()
   (:documentation "DEPRECATED: Base class to allow specification of
-  composition to get. Must be subclassed."))
+  composition to get. Must be subclassed.")) ; FIXME: Why deprecated?
 
 (defclass constituent-identifier (identifier) ()
-  (:documentation "Base class to allow specifiction of constituents"))
+  (:documentation "Base class to allow specification of
+  constituents"))
+
 (defclass composition-identifier (constituent-identifier) ()
-  (:documentation "Base class to allow-specification of constituents"))
+  (:documentation "Base class to allow specification of
+  compositions constituents"))
+
+(defclass event-identifier (identifier) ()
+  (:documentation "Base class to allow specification of events."))
 
 (defclass moment (amuse-object) ()
   (:documentation "Object indicating a point in time"))
--- a/base/package.lisp	Thu Jul 16 15:58:07 2009 +0100
+++ b/base/package.lisp	Thu Jul 16 16:44:06 2009 +0100
@@ -160,4 +160,12 @@
 	   #:%list-slot-sequence-data
 	   #:list-slot-sequence
 	   #:move-to-first-bar
+	   #:copy-event
+	   #:voice
+	   #:event-identifier
+	   #:id
+	   #:event-id
+	   #:composition-id
+	   #:interval
+	   #:event
 	   ))
--- a/implementations/geerdes/classes.lisp	Thu Jul 16 15:58:07 2009 +0100
+++ b/implementations/geerdes/classes.lisp	Thu Jul 16 16:44:06 2009 +0100
@@ -7,13 +7,24 @@
 
 (defclass geerdes-object (property-list-mixin) ())
 
-(defclass geerdes-identifier (composition-identifier geerdes-object) ())
-(defclass geerdes-identifier-cat-id (geerdes-identifier)
+(defclass geerdes-identifier (geerdes-object) ())
+
+(defclass geerdes-composition-identifier (composition-identifier
+					  geerdes-object) ())
+
+(defclass geerdes-identifier-cat-id (geerdes-composition-identifier)
   ((cat-id :initarg :cat-id
 	   :initform 'nil)))
-(defclass geerdes-identifier-file-id (geerdes-identifier)
+
+(defclass geerdes-identifier-file-id (geerdes-composition-identifier)
   ((file-id :initarg :file-id
-	    :initform 'nil)))
+	    :initform 'nil))
+  (:documentation "Define geerdes-file-id as composition-id."))
+
+(defclass geerdes-event-identifier (event-identifier
+				    geerdes-identifier)
+  ((event-id :initarg :event-id
+	     :reader event-id)))
 
 (defclass geerdes-composition (midi-composition geerdes-object)
   ((db-entry :initarg :db-entry
@@ -50,12 +61,18 @@
 			      :initform 0
 			      :accessor %ioi-mode)))
 
-(defclass geerdes-pitched-event (midi-pitched-event geerdes-object)
-  ((id :initarg :id
-       :accessor %geerdes-pitched-event-id))
-  (:documentation "Only adds a database id to midi-pitched-event"))
+(defclass geerdes-event (geerdes-object) ()
+  (:documentation "Base class for geerdes events."))
 
-(defclass geerdes-percussive-event (midi-percussive-event geerdes-object)
-  ((id :initarg :id
-       :accessor %geerdes-percussive-event-id))
-  (:documentation "Only adds a database id to midi-percussive-event"))
+(defclass geerdes-pitched-event (midi-pitched-event geerdes-event)
+  ((identifier :initarg :identifier
+	       :reader identifier))
+  (:documentation "Only adds a database identifier to
+  midi-pitched-event"))
+
+(defclass geerdes-percussive-event (midi-percussive-event
+				    geerdes-event)
+  ((identifier :initarg :identifier
+	       :reader identifier))
+  (:documentation "Only adds a database identifier to
+  midi-percussive-event"))
--- a/implementations/geerdes/constructors.lisp	Thu Jul 16 15:58:07 2009 +0100
+++ b/implementations/geerdes/constructors.lisp	Thu Jul 16 16:44:06 2009 +0100
@@ -1,5 +1,25 @@
 (cl:in-package #:amuse-geerdes)
 
+;; Identifiers
+;; FIXME: use standard constructor names?
+;; FIXME: use standard composition-identifier?
+(defun g-id (cat-id)
+  "Make a geerdes-identifier based on a catalogue id"
+  (make-instance 'geerdes-identifier-cat-id
+		 :cat-id cat-id))
+
+(defun g-id-file-id (file-id)
+  "Make a geerdes-identifier based on the file id. This is used as
+the standard composition-id."
+  (make-instance 'geerdes-identifier-file-id
+		 :file-id file-id))
+
+(defun make-geerdes-event-identifier (event-id)
+  (make-instance 'geerdes-event-identifier
+		 :event-id event-id))
+
+;; Events
+
 (defgeneric %initialise-notes (composition))
 (defmethod %initialise-notes ((composition geerdes-composition))
   (let ((notes) (l 0) (last-time 0) (monody-notes)
@@ -108,8 +128,8 @@
   (and (not (= (%fast-channel event-row) 10))
        (< (%fast-patch event-row) 112)))
 
-(defun make-geerdes-pitched-event (pitch-number velocity patch
-				channel track onset duration id)
+(defun make-geerdes-pitched-event (pitch-number velocity patch channel
+				   track onset duration event-id)
   (make-instance 'geerdes-pitched-event
 		 :number pitch-number
 		 :velocity velocity
@@ -118,10 +138,12 @@
 		 :track track
 		 :time onset
 		 :interval duration
-		 :id id))
+		 :identifier (make-geerdes-event-identifier
+			      event-id)))
 
 (defun make-geerdes-percussive-event (pitch-number velocity patch
-				   channel track onset duration id)
+				      channel track onset duration
+				      event-id)
   (make-instance 'geerdes-percussive-event
 		 :sound pitch-number
 		 :velocity velocity
@@ -130,7 +152,8 @@
 		 :track track
 		 :time onset
 		 :interval duration
-		 :id id))
+		 :identifier (make-geerdes-event-identifier
+			      event-id)))
 
 (defmethod copy-event ((event geerdes-pitched-event))
   (with-slots ((channel amuse-midi::channel)
@@ -139,7 +162,8 @@
 	       (time amuse::time)
 	       (interval amuse::interval)
 	       (velocity amuse-midi::velocity)
-	       (patch amuse-midi::patch) id)
+	       (patch amuse-midi::patch)
+	       identifier)
       event
     (make-instance 'geerdes-pitched-event
 		   :channel channel
@@ -149,7 +173,8 @@
 		   :interval interval
 		   :velocity velocity
 		   :patch patch
-		   :id id)))
+		   :identifier identifier)))
+
 (defmethod copy-event ((event geerdes-percussive-event))
   (with-slots ((channel amuse-midi::channel)
 	       (track amuse-midi::track)
@@ -157,7 +182,8 @@
 	       (interval amuse::interval)
 	       (velocity amuse-midi::velocity)
 	       (patch amuse-midi::patch)
-	       (sound amuse-midi::sound) id)
+	       (sound amuse-midi::sound)
+	       identifier)
       event
     (make-instance 'geerdes-percussive-event
 		   :channel channel
@@ -167,7 +193,7 @@
 		   :velocity velocity
 		   :patch patch
 		   :sound sound
-		   :id id)))
+		   :identifier identifier)))
 
 ;; We want any function that generates a sequence from a geerdes
 ;; composition to preserve all slot values:
--- a/implementations/geerdes/methods.lisp	Thu Jul 16 15:58:07 2009 +0100
+++ b/implementations/geerdes/methods.lisp	Thu Jul 16 16:44:06 2009 +0100
@@ -1,14 +1,6 @@
 (cl:in-package #:amuse-geerdes)
 
-;;; Compositions
-
-;; identifiers
-(defun g-id (cat-id)
-  "Make a geerdes-identifier based on a catalogue id"
-  (make-instance 'geerdes-identifier-cat-id :cat-id cat-id))
-(defun g-id-file-id (file-id)
-  "Make a geerdes-identifier based on a catalogue id"
-  (make-instance 'geerdes-identifier-file-id :file-id file-id))
+;; Identifiers
 
 (defgeneric cat-id (object)
   (:documentation "Return a database catalogue id for object (for
@@ -16,7 +8,7 @@
 (defgeneric file-id (object)
   (:documentation "Return a database file id for object (for
   Geerdes data, this is a unique integer identifier)"))
-(defgeneric (setf cat-id) (value object))
+(defgeneric (setf cat-id) (value object)) ;; FIXME: why?
 (defgeneric (setf file-id) (value object))
 
 (defmethod cat-id ((object geerdes-composition))
@@ -36,6 +28,18 @@
 (defmethod (setf file-id) (value (object geerdes-identifier-file-id))
   (setf (slot-value object 'file-id) value))
 
+;; Identifier accessors for CHARM constituents
+
+(defmethod composition-id ((o geerdes-composition-identifier))
+  "Composition-id is file-id in geerdes."
+  (file-id o))
+
+(defmethod composition-id ((o geerdes-composition))
+  (file-id o))
+
+(defmethod event-id ((o geerdes-event))
+  (event-id (identifier o)))
+
 ;; Specialised constructors
 
 (defmethod make-composition-identifier ((package (eql *package*))
@@ -44,7 +48,8 @@
 
 ;; Composition 
 
-(defmethod get-composition ((identifier geerdes-identifier))
+(defmethod get-composition ((identifier
+			     geerdes-composition-identifier))
   (let* ((composition (get-geerdes-composition identifier)))
     (%initialise-notes composition)
     (%initialise-constituents composition)))