diff --git a/data/foreign-array.lisp b/data/foreign-array.lisp index 3e78e95eebce66c22d9c49ca1520171eb9966c16..f5b3a543df049eff58df569e764bf622ad4f497d 100644 --- a/data/foreign-array.lisp +++ b/data/foreign-array.lisp @@ -1,6 +1,6 @@ ;; A grid:foreign-array with added metadata for GSL. ;; Liam Healy 2008-04-06 21:23:41EDT -;; Time-stamp: <2010-07-13 12:06:45EDT foreign-array.lisp> +;; Time-stamp: <2010-07-13 22:53:02EDT foreign-array.lisp> ;; ;; Copyright 2008, 2009, 2010 Liam M. Healy ;; Distributed under the terms of the GNU General Public License @@ -76,21 +76,25 @@ (defun make-foreign-array-from-mpointer (mpointer - &optional (element-type 'double-float) (category :vector) finalize) + &optional (element-type 'double-float) (category-or-rank 'vector) finalize) "Make the foreign array when a GSL pointer to a gsl-vector-c or gsl-matrix-c is given." - (let* ((cstruct + (let* ((category + (case category-or-rank + ((vector :vector 1) 'vector) + ((matrix :matrix 2) 'matrix) + (t (error "Unrecognized category ~a" category-or-rank)))) + (cstruct (case category - ((vector :vector 1) 'gsl-vector-c) - ((matrix :matrix 2) 'gsl-matrix-c) - (t (error "Unrecognized category ~a" category)))) + (vector 'gsl-vector-c) + (matrix 'gsl-matrix-c))) (fa (grid:make-grid (case category - ((vector :vector 1) + (vector `((foreign-array ,(cffi:foreign-slot-value mpointer cstruct 'size)) ,element-type)) - ((matrix :matrix 2) + (matrix `((foreign-array ,(cffi:foreign-slot-value mpointer cstruct 'size0) ,(cffi:foreign-slot-value mpointer cstruct 'size1))