[movitz-cvs] CVS update: movitz/losp/muerte/ratios.lisp

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Sat Jul 31 23:35:09 UTC 2004


Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv28989

Modified Files:
	ratios.lisp 
Log Message:
Changed the implementation of ratios from a defstruct to a built-in
structure.

Date: Sat Jul 31 16:35:09 2004
Author: ffjeld

Index: movitz/losp/muerte/ratios.lisp
diff -u movitz/losp/muerte/ratios.lisp:1.4 movitz/losp/muerte/ratios.lisp:1.5
--- movitz/losp/muerte/ratios.lisp:1.4	Fri Jul 30 15:04:17 2004
+++ movitz/losp/muerte/ratios.lisp	Sat Jul 31 16:35:09 2004
@@ -10,7 +10,7 @@
 ;;;; Author:        Frode Vatvedt Fjeld <frodef at acm.org>
 ;;;; Created at:    Tue Jul 20 00:39:59 2004
 ;;;;                
-;;;; $Id: ratios.lisp,v 1.4 2004/07/30 22:04:17 ffjeld Exp $
+;;;; $Id: ratios.lisp,v 1.5 2004/07/31 23:35:09 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -21,9 +21,37 @@
 
 (in-package muerte)
 
-(defstruct (ratio (:constructor make-ratio (numerator denominator))
-	    (:superclass rational))
-  numerator denominator)
+;;;(defstruct (ratio (:constructor make-ratio (numerator denominator))
+;;;	    (:superclass rational))
+;;;  numerator denominator)
+
+(defun make-ratio (numerator denominator)
+  (check-type numerator integer)
+  (check-type denominator (integer 1 *))
+  (let ((ratio (malloc-pointer-words 4)))
+    (setf (memref ratio #.(bt:slot-offset 'movitz:movitz-basic-vector 'movitz::type)
+		  0 :unsigned-byte32)
+      #.(movitz:tag :ratio))
+    (setf (memref ratio -6 2 :lisp) numerator
+	  (memref ratio -6 3 :lisp) denominator)
+    ratio))
+
+(defun ratio-p (x)
+  (typep x 'ratio))
+
+(define-compiler-macro %ratio-numerator (x)
+  `(memref ,x ,(bt:slot-offset 'movitz::movitz-ratio 'movitz::numerator) 0 :lisp))
+
+(defun ratio-numerator (x)
+  (check-type x ratio)
+  (%ratio-numerator x))
+
+(define-compiler-macro %ratio-denominator (x)
+  `(memref ,x ,(bt:slot-offset 'movitz::movitz-ratio 'movitz::denominator) 0 :lisp))
+
+(defun ratio-denominator (x)
+  (check-type x ratio)
+  (%ratio-denominator x))
 
 (defun make-rational (numerator denominator)
   (check-type numerator integer)
@@ -44,11 +72,11 @@
 (defun numerator (x)
   (etypecase x
     (integer x)
-    (ratio (ratio-numerator x))))
+    (ratio (%ratio-numerator x))))
 
 (defun denominator (x)
   (etypecase x
     (integer 1)
-    (ratio (ratio-denominator x))))
+    (ratio (%ratio-denominator x))))
 
 (defconstant pi #xea7632a/4aa1a8b)





More information about the Movitz-cvs mailing list