Mon Oct 13 21:01:42 PDT 2008 David Brown <lisp(a)davidb.org>
* 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 <lisp(a)davidb.org>**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 <sionescu(a)common-lisp.net>**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 <loliveira(a)common-lisp.net>**20080926205112]
[Update SCL port.
Luis Oliveira <loliveira(a)common-lisp.net>**20080926195008
Patch courtesy of Douglas Crosher.
]
[TAG 0.10.2
Luis Oliveira <loliveira(a)common-lisp.net>**20080912133500]
[update cffi.asd for version 0.10.2
Luis Oliveira <loliveira(a)common-lisp.net>**20080912133456]
[TODO cleanup
Luis Oliveira <loliveira(a)common-lisp.net>**20080912133424]
[Fix handling of the T clause in DEFINE-FOREIGN-LIBRARY
Luis Oliveira <loliveira(a)common-lisp.net>**20080912133350
- Added regression test: LIBRARY.T-CLAUSE.
Bug report and initial patch courtesy of Kalyanov Dmitry.
]
[Add wrapper directives PROCLAIM and DECLAIM.
Stelian Ionescu <sionescu(a)common-lisp.net>**20080830083833]
[Add option BASE-TYPE to groveler directives CENUM and CONSTANTENUM.
Stelian Ionescu <sionescu(a)common-lisp.net>**20080822144342]
[Small fix to the manual: use @var instead of @code in CENUM and CONSTANTENUM docs.
Stelian Ionescu <sionescu(a)common-lisp.net>**20080822143956]
[Add option DEFINE-CONSTANTS to groveler directives CENUM and CONSTANTENUM.
Stelian Ionescu <sionescu(a)common-lisp.net>**20080822141800
If DEFINE-CONSTANTS is non-null, the enum members will also be defined
as constants.
]
[Make groveler directive CONSTANT more robust.
Stelian Ionescu <sionescu(a)common-lisp.net>**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 <loliveira(a)common-lisp.net>**20080822140947]
[manual/groveller: fix ctype's documentation
Luis Oliveira <loliveira(a)common-lisp.net>**20080822133130
Reported by Stelian Ionescu.
]
[TAG 0.10.1
Luis Oliveira <loliveira(a)common-lisp.net>**20080820225954]
Patch bundle hash:
73d9e52b7965b414d40f672c4b961260c81b615d