From 7b35c93f34d7fbab2e7d487b42be5b1cb1aaa73a Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Fri, 22 Oct 2004 20:38:41 +0000 Subject: [PATCH] r10100: move function so that deref-array macro is defined --- src/aggregates.lisp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/aggregates.lisp b/src/aggregates.lisp index 4160864..5fdc908 100644 --- a/src/aggregates.lisp +++ b/src/aggregates.lisp @@ -213,3 +213,37 @@ of the enum-name name, separator-string, and field-name" `(ccl::def-foreign-type nil (:union ,name ,@(process-struct-fields name fields))) ) + + +#-(or sbcl cmu) +(defun convert-from-foreign-usb8 (s len) + (declare (optimize (speed 3) (space 0) (safety 0) (compilation-speed 0)) + (fixnum len)) + (let ((a (make-array len :element-type '(unsigned-byte 8)))) + (dotimes (i len a) + (declare (fixnum i)) + (setf (aref a i) (uffi:deref-array s '(:array :unsigned-byte) i))))) + +#+sbcl +(defun convert-from-foreign-usb8 (s len) + (declare (type sb-sys:system-area-pointer sap)) + (locally + (declare (optimize (speed 3) (safety 0))) + (let ((result (make-array len :element-type '(unsiged-byte 8)))) + (sb-kernel:copy-from-system-area s 0 + result (* sb-vm:vector-data-offset + sb-vm:n-word-bits) + (* len sb-vm:n-byte-bits)) + result))) + +#+cmu +(defun convert-from-foreign-usb8 (s le) + (declare (type system:system-area-pointer sap)) + (locally + (declare (optimize (speed 3) (safety 0))) + (let ((result (make-array len :element-type '(unsiged-byte 8)))) + (kernel:copy-from-system-area s 0 + result (* vm:vector-data-offset + vm:word-bits) + (* len vm:byte-bits)) + result))) -- 2.34.1