~mdw
/
clg
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added proper protection for multi threaded event handling
[clg]
/
gffi
/
basic-types.lisp
diff --git
a/gffi/basic-types.lisp
b/gffi/basic-types.lisp
index
b2b0a89
..
f06e763
100644
(file)
--- a/
gffi/basic-types.lisp
+++ b/
gffi/basic-types.lisp
@@
-20,7
+20,7
@@
;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-;; $Id: basic-types.lisp,v 1.
3 2006-09-06 09:45:26
espen Exp $
+;; $Id: basic-types.lisp,v 1.
8 2007-06-01 06:24:43
espen Exp $
(in-package "GFFI")
(in-package "GFFI")
@@
-55,6
+55,11
@@
(deftype pointer ()
#+(or cmu sbcl) 'system-area-pointer
#+clisp 'ffi:foreign-address)
(deftype pointer ()
#+(or cmu sbcl) 'system-area-pointer
#+clisp 'ffi:foreign-address)
+(deftype pointer-data ()
+ '(unsigned-byte #+sbcl #.(sb-sizeof-bits 'sb-alien:system-area-pointer)
+ #+clisp #.(ffi:bitsizeof 'ffi:c-pointer)
+ #-(or sbcl clisp) 32))
+
(deftype bool (&optional (size '*)) (declare (ignore size)) 'boolean)
(deftype copy-of (type) type)
(deftype static (type) type)
(deftype bool (&optional (size '*)) (declare (ignore size)) 'boolean)
(deftype copy-of (type) type)
(deftype static (type) type)
@@
-454,18
+459,12
@@
have been written as temporal.")
(define-type-method writer-function ((type single-float) &key temp (inlined t))
(declare (ignore temp))
(assert-inlined type inlined)
(define-type-method writer-function ((type single-float) &key temp (inlined t))
(declare (ignore temp))
(assert-inlined type inlined)
- #'(lambda (value location &optional (offset 0))
- (setf
- #+(or cmu sbcl)(sap-ref-single location offset)
- #+clisp(ffi:memory-as location 'single-float offset)
- (coerce value 'single-float))))
+ #'(setf ref-single-float))
(define-type-method reader-function ((type single-float) &key ref (inlined t))
(declare (ignore ref))
(assert-inlined type inlined)
(define-type-method reader-function ((type single-float) &key ref (inlined t))
(declare (ignore ref))
(assert-inlined type inlined)
- #'(lambda (location &optional (offset 0))
- #+(or cmu sbcl)(sap-ref-single location offset)
- #+clisp(ffi:memory-as location 'single-float offset)))
+ #'ref-single-float)
@@
-502,17
+501,18
@@
have been written as temporal.")
(declare (ignore temp))
(assert-inlined type inlined)
#'(lambda (value location &optional (offset 0))
(declare (ignore temp))
(assert-inlined type inlined)
#'(lambda (value location &optional (offset 0))
- (setf
- #+(or cmu sbcl)(sap-ref-double location offset)
- #+clisp(ffi:memory-as location 'double-float offset)
- (coerce value 'double-float))))
+ (setf (ref-double-float location offset) (coerce value 'double-float))))
(define-type-method reader-function ((type double-float) &key ref (inlined t))
(declare (ignore ref))
(assert-inlined type inlined)
(define-type-method reader-function ((type double-float) &key ref (inlined t))
(declare (ignore ref))
(assert-inlined type inlined)
- #'(lambda (location &optional (offset 0))
- #+(or cmu sbcl)(sap-ref-double location offset)
- #+clisp(ffi:memory-as location 'double-float offset)))
+ #'ref-double-float)
+
+(deftype optimized-double-float () 'double-float)
+
+(define-type-method to-alien-form ((type optimized-double-float) form &optional copy-p)
+ (declare (ignore type copy-p))
+ form)
@@
-570,6
+570,7
@@
have been written as temporal.")
;;; String
(defun utf8-length (string)
;;; String
(defun utf8-length (string)
+ "Returns the length including the trailing zero, of STRING encoded as UTF8"
(1+ (loop
for char across string
as char-code = (char-code char)
(1+ (loop
for char across string
as char-code = (char-code char)
@@
-601,7
+602,7
@@
have been written as temporal.")
((< char-code #x800) (encode 11))
((< char-code #x10000) (encode 16))
((< char-code #x200000) (encode 21)))))
((< char-code #x800) (encode 11))
((< char-code #x10000) (encode 16))
((< char-code #x200000) (encode 21)))))
- (setf (ref-byte location
len
) 0)
+ (setf (ref-byte location
(1- len)
) 0)
location))
(defun decode-utf8-string (c-string)
location))
(defun decode-utf8-string (c-string)
@@
-1086,7
+1087,7
@@
have been written as temporal.")
(define-type-method from-alien-function ((type copy-of) &key (ref :copy))
(if (eq ref :copy)
(from-alien-function (second (type-expand-to 'copy-of type)) :ref ref)
(define-type-method from-alien-function ((type copy-of) &key (ref :copy))
(if (eq ref :copy)
(from-alien-function (second (type-expand-to 'copy-of type)) :ref ref)
- (error "Keyword arg :REF to FROM-ALIEN-F
ORM
should be :COPY for type ~A. It was give ~A" type ref)))
+ (error "Keyword arg :REF to FROM-ALIEN-F
UNCTION
should be :COPY for type ~A. It was give ~A" type ref)))
(define-type-method to-alien-form ((type copy-of) form &optional (copy-p t))
(if copy-p
(define-type-method to-alien-form ((type copy-of) form &optional (copy-p t))
(if copy-p
@@
-1129,17
+1130,17
@@
have been written as temporal.")
(define-type-method from-alien-function ((type static) &key (ref :static))
(if (eq ref :static)
(from-alien-function (second (type-expand-to 'static type)) :ref ref)
(define-type-method from-alien-function ((type static) &key (ref :static))
(if (eq ref :static)
(from-alien-function (second (type-expand-to 'static type)) :ref ref)
- (error "Keyword arg :REF to FROM-ALIEN-F
ORM
should be :STATIC for type ~A. It was give ~A" type ref)))
+ (error "Keyword arg :REF to FROM-ALIEN-F
UNCTION
should be :STATIC for type ~A. It was give ~A" type ref)))
(define-type-method to-alien-function ((type static) &optional copy-p)
(if (not copy-p)
(to-alien-function (second (type-expand-to 'static type)) t)
(define-type-method to-alien-function ((type static) &optional copy-p)
(if (not copy-p)
(to-alien-function (second (type-expand-to 'static type)) t)
- (error "COPY-P argument to TO-ALIEN-FUNCTION should always be NIL for type ~A" type)))
+
(error "COPY-P argument to TO-ALIEN-FUNCTION should always be NIL for type ~A" type)))
(define-type-method to-alien-form ((type static) &optional copy-p)
(if (not copy-p)
(define-type-method to-alien-form ((type static) &optional copy-p)
(if (not copy-p)
- (to-alien-f
unction
(second (type-expand-to 'static type)) t)
-
(error "COPY-P argument to TO-ALIEN-FUNCTION
should always be NIL for type ~A" type)))
+ (to-alien-f
orm
(second (type-expand-to 'static type)) t)
+
(error "COPY-P argument to TO-ALIEN-FORM
should always be NIL for type ~A" type)))
(define-type-method reader-function ((type static) &key (ref :read) (inlined nil inlined-p))
(if inlined-p
(define-type-method reader-function ((type static) &key (ref :read) (inlined nil inlined-p))
(if inlined-p