1.0.23.22: rename SIMPLE-ARRAY-VECTOR to ARRAY-STORAGE-VECTOR
authorNikodemus Siivola <nikodemus@random-state.net>
Fri, 5 Dec 2008 11:31:39 +0000 (11:31 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Fri, 5 Dec 2008 11:31:39 +0000 (11:31 +0000)
 * Allow fething the underlying vector of any non-displaced array.

NEWS
doc/manual/beyond-ansi.texinfo
src/code/array.lisp
tests/array.pure.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index 58c0a8c..71f03d8 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,5 @@
 ;;;; -*- coding: utf-8; -*-
-  * new feature: SIMPLE-ARRAY-VECTOR provides access to the underlying
+  * new feature: ARRAY-STORAGE-VECTOR provides access to the underlying
     data vector of an multidimensional SIMPLE-ARRAY.
   * new feature: the system now signals a continuable error if standard
     readtable modification is attempted.
index c2937d5..a00ae6a 100644 (file)
@@ -380,7 +380,7 @@ accessor @code{sb-ext:name-conflict-symbols}.
 @comment  node-name,  next,  previous,  up
 @section Miscellaneous Extensions
 
-@include fun-sb-ext-simple-array-vector.texinfo
+@include fun-sb-ext-array-storage-vector.texinfo
 
 @node Stale Extensions
 @comment  node-name,  next,  previous,  up
index b1239ca..266c737 100644 (file)
@@ -1085,28 +1085,27 @@ of specialized arrays is supported."
   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.
+(declaim (ftype (function (array) (values (simple-array * (*)) &optional))
+                array-storage-vector))
+(defun array-storage-vector (array)
+  "Returns the underlying storage vector of ARRAY, which must be a non-displaced 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.
+In SBCL, if ARRAY is a of type \(SIMPLE-ARRAY * \(*)), it is its own storage
+vector. Multidimensional arrays, arrays with fill pointers, and adjustable
+arrays have an underlying storage vector with the same ARRAY-ELEMENT-TYPE as
+ARRAY, which this function returns.
 
 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.
+  ;; the return value is always of the known type.
   (truly-the (simple-array * (*))
              (if (array-header-p array)
-                 (%array-data-vector array)
+                 (if (%array-displaced-p array)
+                     (error "~S cannot be used with displaced arrays. Use ~S instead."
+                            'array-storage-vector 'array-displacement)
+                     (%array-data-vector array))
                  array)))
 \f
 ;;;; used by SORT
index 0994d49..21088fc 100644 (file)
         (assert (eql 12 (type-error-datum e)))
         (assert (equal '(integer 0 3) (type-error-expected-type e)))))))
 
-(with-test (:name simple-array-vector)
+(with-test (:name array-storage-vector)
   (let ((vec (vector 1 2 3)))
-    (assert (eq vec (sb-ext:simple-array-vector vec)))
+    (assert (eq vec (sb-ext:array-storage-vector vec)))
     (assert (equalp (vector 1 2 3 4)
-                    (sb-ext:simple-array-vector
+                    (sb-ext:array-storage-vector
                      (make-array '(2 2) :initial-contents '((1 2) (3 4))))))
     (assert (eq 'fixnum (array-element-type
-                         (sb-ext:simple-array-vector (make-array '(3 4 5)
-                                                                 :element-type 'fixnum)))))))
+                         (sb-ext:array-storage-vector (make-array '(3 4 5)
+                                                                 :element-type 'fixnum)))))
+    (assert (equalp (vector 1 2 3 4 0)
+                    (sb-ext:array-storage-vector
+                     (make-array 5 :fill-pointer 4))))))
index 2f722e4..45d0591 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.23.21"
+"1.0.23.22"