From fb2656c40ff25482dcf3519c3d0fab510216f983 Mon Sep 17 00:00:00 2001 From: Nikodemus Siivola Date: Fri, 5 Dec 2008 11:31:39 +0000 Subject: [PATCH] 1.0.23.22: rename SIMPLE-ARRAY-VECTOR to ARRAY-STORAGE-VECTOR * Allow fething the underlying vector of any non-displaced array. --- NEWS | 2 +- doc/manual/beyond-ansi.texinfo | 2 +- src/code/array.lisp | 27 +++++++++++++-------------- tests/array.pure.lisp | 13 ++++++++----- version.lisp-expr | 2 +- 5 files changed, 24 insertions(+), 22 deletions(-) diff --git a/NEWS b/NEWS index 58c0a8c..71f03d8 100644 --- 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. diff --git a/doc/manual/beyond-ansi.texinfo b/doc/manual/beyond-ansi.texinfo index c2937d5..a00ae6a 100644 --- a/doc/manual/beyond-ansi.texinfo +++ b/doc/manual/beyond-ansi.texinfo @@ -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 diff --git a/src/code/array.lisp b/src/code/array.lisp index b1239ca..266c737 100644 --- a/src/code/array.lisp +++ b/src/code/array.lisp @@ -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))) ;;;; used by SORT diff --git a/tests/array.pure.lisp b/tests/array.pure.lisp index 0994d49..21088fc 100644 --- a/tests/array.pure.lisp +++ b/tests/array.pure.lisp @@ -237,12 +237,15 @@ (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)))))) diff --git a/version.lisp-expr b/version.lisp-expr index 2f722e4..45d0591 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -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" -- 1.7.10.4