Update of /project/cl-gsl/cvsroot/cl-gsl In directory common-lisp.net:/tmp/cvs-serv30766
Modified Files: ffi.lisp Log Message: Changes needed for complex vectors.
Date: Tue Mar 15 04:15:21 2005 Author: edenny
Index: cl-gsl/ffi.lisp diff -u cl-gsl/ffi.lisp:1.2 cl-gsl/ffi.lisp:1.3 --- cl-gsl/ffi.lisp:1.2 Fri Mar 4 02:52:38 2005 +++ cl-gsl/ffi.lisp Tue Mar 15 04:15:20 2005 @@ -121,12 +121,12 @@
(def-foreign-struct gsl-block-complex (size :unsigned-long) - (data (* gsl-complex))) + (data (* :double)))
(def-foreign-struct gsl-vector-complex (size :unsigned-long) (stride :unsigned-long) - (data (* gsl-complex)) + (data (* :double)) (g-block (* gsl-block-complex)) (owner :int))
@@ -137,12 +137,12 @@
(def-foreign-struct gsl-block-complex-float (size :unsigned-long) - (data (* gsl-complex-float))) + (data (* :float)))
(def-foreign-struct gsl-vector-complex-float (size :unsigned-long) (stride :unsigned-long) - (data (* gsl-complex-float)) + (data (* :float)) (g-block (* gsl-block-complex-float)) (owner :int))
@@ -200,15 +200,15 @@
;; ----------------------------------------------------------------------
-(defun gsl-complex->complex (z) - (declare (gsl-complex-def z)) - (let ((dat-array (uffi:get-slot-value z (:array :double) 'cl-gsl::dat))) +(defun gsl-complex->complex (z-ptr) + ;; TODO: this seems to work with pointers and values +;; (declare (gsl-complex-def z)) + (let ((dat-array (uffi:get-slot-value z-ptr '(:array :double) 'cl-gsl::dat))) (complex (uffi:deref-array dat-array :double 0) (uffi:deref-array dat-array :double 1))))
-(defun gsl-complex-float->complex (z) - (declare (gsl-complex-float-def z)) - (let ((dat-array (uffi:get-slot-value z (:array :float) 'cl-gsl::dat))) +(defun gsl-complex-float->complex (z-ptr) + (let ((dat-array (uffi:get-slot-value z-ptr '(:array :float) 'cl-gsl::dat))) (complex (uffi:deref-array dat-array :float 0) (uffi:deref-array dat-array :float 1))))
@@ -216,19 +216,19 @@ ;; How do we free it? ;; Replace with a with-complex->gsl-complex macro that cleans up after ;; itself -(defun complex->gsl-complex (z) +(defun complex->gsl-complex-ptr (z) (let* ((z-ptr (uffi:allocate-foreign-object 'gsl-complex)) - (dat-array (uffi:get-slot-value z-ptr (:array :float) 'cl-gsl::dat))) + (dat-array (uffi:get-slot-value z-ptr '(:array :double) 'cl-gsl::dat))) (setf (uffi:deref-array dat-array :double 0) (realpart z)) (setf (uffi:deref-array dat-array :double 1) (imagpart z)) z-ptr))
;; FIXME: see above -(defun complex->gsl-complex-float (z) +(defun complex->gsl-complex-float-ptr (z) (let* ((z-ptr (uffi:allocate-foreign-object 'gsl-complex-float)) - (dat-array (uffi:get-slot-value z-ptr (:array :float) 'cl-gsl::dat))) - (setf (uffi:deref-array dat-array :double 0) (realpart z)) - (setf (uffi:deref-array dat-array :double 1) (imagpart z)) + (dat-array (uffi:get-slot-value z-ptr '(:array :float) 'cl-gsl::dat))) + (setf (uffi:deref-array dat-array :float 0) (realpart z)) + (setf (uffi:deref-array dat-array :float 1) (imagpart z)) z-ptr))