From: Nikodemus S. <de...@us...> - 2008-12-04 10:01:16
|
Update of /cvsroot/sbcl/sbcl/src/code In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv26030/src/code Modified Files: array.lisp Log Message: 1.0.23.17: new function: SIMPLE-ARRAY-VECTOR * For users to extract the underlying vector from a multidimensional array. Warn about implementation-detail nature of this. * Add Miscellaneuous Extensions section to Beyond ANSI chapter in the manual. Index: array.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/array.lisp,v retrieving revision 1.78 retrieving revision 1.79 diff -u -d -r1.78 -r1.79 --- array.lisp 1 Dec 2008 15:44:41 -0000 1.78 +++ array.lisp 4 Dec 2008 10:01:04 -0000 1.79 @@ -1083,6 +1083,31 @@ (setf (%array-dimension array 0) dimensions)) (setf (%array-displaced-p array) displacedp) array) + +;;; User visible extension +(declaim (ftype (function (simple-array) (values (simple-array * (*)) &optional)) + simple-array-vector)) +(defun simple-array-vector (array) + "Returns the one-dimensional SIMPLE-ARRAY corresponding to ARRAY. + +The ARRAY must be a SIMPLE-ARRAY. If ARRAY is multidimensional, returns the +underlying one-dimensional SIMPLE-ARRAY which shares storage with ARRAY. +Otherwise returns ARRAY. + +Currently in SBCL a multidimensional SIMPLE-ARRAY has an underlying +one-dimensional SIMPLE-ARRAY, which holds the data in row major order. This +function provides access to that vector. + +Important note: the underlying vector is an implementation detail. Even though +this function exposes it, changes in the implementation may cause this +function to be removed without further warning." + ;; KLUDGE: Without TRULY-THE the system is not smart enough to figure out that + ;; (1) SIMPLE-ARRAY without ARRAY-HEADER-P is a vector (2) the data vector of + ;; a SIMPLE-ARRAY is a vector. + (truly-the (simple-array * (*)) + (if (array-header-p array) + (%array-data-vector array) + array))) ;;;; used by SORT |