chiark / gitweb /
Added poniter sized integer type POINTER-DATA
[clg] / gffi / basic-types.lisp
index b2b0a893bde9131b9b8b2fb4020e2989c98167c0..c18890ecf1b93cb5683389fac57118e25bf4ff59 100644 (file)
@@ -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.
 
-;; $Id: basic-types.lisp,v 1.3 2006-09-06 09:45:26 espen Exp $
+;; $Id: basic-types.lisp,v 1.6 2007-02-19 14:42:24 espen Exp $
 
 (in-package "GFFI")
 
@@ -55,6 +55,11 @@ (deftype char () 'base-char)
 (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)
@@ -514,6 +519,12 @@ (define-type-method reader-function ((type double-float) &key ref (inlined t))
       #+(or cmu sbcl)(sap-ref-double location offset)
       #+clisp(ffi:memory-as location 'double-float offset)))
 
+(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)
+
 
 
 ;;; Character
@@ -570,6 +581,7 @@ (define-type-method reader-function ((type base-char) &key ref (inlined t))
 ;;; 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)
@@ -601,7 +613,7 @@ (defun encode-utf8-string (string &optional location)
           ((< 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)