Mon Oct 13 21:01:42 PDT 2008 David Brown * Shareable Vectors for ECL. ECL uses a non-moving, conservative garbage collector, so shareable byte vectors can be implemented just by using a pointer to the data. New patches: [Shareable Vectors for ECL. David Brown **20081014040142 ECL uses a non-moving, conservative garbage collector, so shareable byte vectors can be implemented just by using a pointer to the data. ] hunk ./src/cffi-ecl.lisp 128 +;;;# Shareable Vectors +;;; +;;; This interface is very experimental. WITH-POINTER-TO-VECTOR-DATA +;;; should be defined to perform a copy-in/copy-out if the Lisp +;;; implementation can't do this. + +(defun make-shareable-byte-vector (size) + "Create a Lisp vector of SIZE bytes that can passed to +WITH-POINTER-TO-VECTOR-DATA." + (make-array size :element-type '(unsigned-byte 8))) + +;;; ECL, built with the Boehm GC never moves allocated data, so this +;;; isn't nearly as hard to do. +(defun %vector-address (vector) + "Return the address of VECTOR's data." + (check-type vector (vector (unsigned-byte 8))) + (ffi:c-inline (vector) (object) :unsigned-long + "(unsigned long) #0->vector.self.b8" + :side-effects nil + :one-liner t)) + +(defmacro with-pointer-to-vector-data ((ptr-var vector) &body body) + "Bind PTR-VAR to a foreign pointer to the data in VECTOR." + `(let ((,ptr-var (make-pointer (%vector-address ,vector)))) + ,@body)) + Context: [Fix SBCL %CLOSE-FOREIGN-LIBRARY wrt changes in 1.0.21.15 Stelian Ionescu **20081009231840 %CLOSE-FOREIGN-LIBRARY makes use of SB-ALIEN::SHARED-OBJECT-FILE which has disappeared in 1.0.21.15 - replaced by SHARED-OBJECT-PATHNAME, so I've added a readtime conditional that detects the right accessor. ] [gendocs.sh fix: pass --no-userinit to sbcl Luis Oliveira **20080926205112] [Update SCL port. Luis Oliveira **20080926195008 Patch courtesy of Douglas Crosher. ] [TAG 0.10.2 Luis Oliveira **20080912133500] [update cffi.asd for version 0.10.2 Luis Oliveira **20080912133456] [TODO cleanup Luis Oliveira **20080912133424] [Fix handling of the T clause in DEFINE-FOREIGN-LIBRARY Luis Oliveira **20080912133350 - Added regression test: LIBRARY.T-CLAUSE. Bug report and initial patch courtesy of Kalyanov Dmitry. ] [Add wrapper directives PROCLAIM and DECLAIM. Stelian Ionescu **20080830083833] [Add option BASE-TYPE to groveler directives CENUM and CONSTANTENUM. Stelian Ionescu **20080822144342] [Small fix to the manual: use @var instead of @code in CENUM and CONSTANTENUM docs. Stelian Ionescu **20080822143956] [Add option DEFINE-CONSTANTS to groveler directives CENUM and CONSTANTENUM. Stelian Ionescu **20080822141800 If DEFINE-CONSTANTS is non-null, the enum members will also be defined as constants. ] [Make groveler directive CONSTANT more robust. Stelian Ionescu **20080822141527 If a constant's name is a keyword, change it to a symbol interned in the current package. ] [manual: restore colorization workingness Luis Oliveira **20080822140947] [manual/groveller: fix ctype's documentation Luis Oliveira **20080822133130 Reported by Stelian Ionescu. ] [TAG 0.10.1 Luis Oliveira **20080820225954] Patch bundle hash: 73d9e52b7965b414d40f672c4b961260c81b615d