changeset 20:6eb54ad3b8b4

Bug fixes mostly, but also re-aliasing onset to moment rather than timepoint darcs-hash:20061213162757-f76cc-39094b0c337efac30d8a957a9087436146ea2e82.gz
author David Lewis <d.lewis@gold.ac.uk>
date Wed, 13 Dec 2006 16:27:57 +0000
parents 2f331bbdfab8
children c389ba869ef9
files generics.lisp methods.lisp
diffstat 2 files changed, 18 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/generics.lisp	Wed Dec 13 15:53:34 2006 +0000
+++ b/generics.lisp	Wed Dec 13 16:27:57 2006 +0000
@@ -27,9 +27,6 @@
 (defgeneric (setf duration) (value period-designator))
 (defgeneric timepoint (moment-designator))
 (defgeneric (setf timepoint) (value moment-designator))
-(defgeneric onset (anchored-period-designator)
-  (:method (apd) (timepoint apd)))
-(defgeneric (setf onset) (value anchored-period-designator))
 (defgeneric cut-off (anchored-period-designator) ; name?
   (:method (apd) (time+ (moment apd) (floating-period apd))))
 
@@ -70,6 +67,10 @@
 (defgeneric moment (moment-designator)
   (:method (md) (make-moment (timepoint md))))
 
+(defgeneric onset (anchored-period-designator)
+  (:method (apd) (momend apd)))
+(defgeneric (setf onset) (value anchored-period-designator))
+
 ;;; Time Protocol (or moments?)
 
 ;; negative times/durations -> ERROR? 
--- a/methods.lisp	Wed Dec 13 15:53:34 2006 +0000
+++ b/methods.lisp	Wed Dec 13 16:27:57 2006 +0000
@@ -165,28 +165,31 @@
 
 (defmethod meets ((object1 anchored-period)
 		  (object2 anchored-period))
-  (or (time= (cut-off object1) (onset object2))
-      (time= (cut-off object2) (onset object1))))
+  (or (time= (cut-off object1) object2)
+      (time= (cut-off object2) object1)))
 
 (defmethod before ((object1 anchored-period)
 		   (object2 anchored-period))
-  (time< (cut-off object1) (onset object2)))
+  (time> object2 (cut-off object1)))
 
 (defmethod overlaps ((object1 anchored-period)
 		     (object2 anchored-period))
-  (or (and (time> (cut-off object1) (onset object2))
-	   (time< (onset object1) (onset object2)))
-      (and (time> (cut-off object1) (cut-off object2))
-	   (time< (onset object1) (cut-off object2)))))
+  ;; FIXME: Is there a tidier method?
+  (or (and (time> object2 object1) ; object1 starts before object2
+	   (time> (cut-off object1) object2) ; object1 ends after object2 starts
+	   (time> (cut-off object2) (cut-off object1))) ; object1 ends before object2 does
+      (and (time> object1 object2) ; object1 starts after object2
+	   (time> (cut-off object2) object1) ; object1 starts before object2 ends
+	   (time> (cut-off object1) (cut-off object2))))) ; object1 ends after object2 does
 
 (defmethod during ((object1 anchored-period)
 		   (object2 anchored-period))
-  (and (time> (onset object1) (onset object2))
+  (and (time> object1 object2)
        (time< (cut-off object2) (cut-off object2))))
 
 (defmethod starts ((object1 anchored-period)
 		   (object2 anchored-period))
-  (time= (onset object1) (onset object2)))
+  (time= object1 object2))
 
 (defmethod ends ((object1 anchored-period)
 		 (object2 anchored-period))
@@ -202,8 +205,8 @@
      ;; period
      nil)
     (t
-     (let ((new-onset (max (onset object1)
-			   (onset object2))))
+     (let ((new-onset (max (timepoint object1)
+			   (timepoint object2))))
        (make-anchored-period new-onset
 			     (time- (min (cut-off object1)
 					 (cut-off object2))