Luís Oliveira wrote:

Леонид Новиков <[EMAIL PROTECTED]> writes:

This patch accelerates work with array

Hi, I suspect the following patch will be even faster (though I don't
have any numbers, do you?). Do let me know if it works for you.


diff -rN -u cffi-luis-old/uffi-compat/uffi-compat.lisp 
cffi-luis-new/uffi-compat/uffi-compat.lisp
--- cffi-luis-old/uffi-compat/uffi-compat.lisp  2005-12-14 11:02:44.000000000 
+0000
+++ cffi-luis-new/uffi-compat/uffi-compat.lisp  2005-12-21 12:00:02.000000000 
+0000
@@ -236,9 +236,12 @@

(defmacro deref-array (array type position)
  "Dereference an array."
-  `(cffi:mem-aref ,array (element-type
-                          (cffi::parse-type
-                           (convert-uffi-type ,type)))
+  `(cffi:mem-aref ,array
+                  ,(if (constantp type)
+                       `',(element-type (cffi::parse-type
+                                         (convert-uffi-type (eval type))))
+                       `(element-type (cffi::parse-type
+ (convert-uffi-type ,type)))) ,position))

;; UFFI's documentation on DEF-UNION is a bit scarce, I'm not sure


Yes really this works well. However this will not help for instance in such event:
(defun any-func ()
    (let ((ptr (uffi:allocate-foreign-object '(:array :int 10))))
   ; some actions are produced with ptr
   (uffi:free-foreign-object ptr))
 )
Object uffi-array-type will create On each call of this functions. If for time of the functioning the program such call several thousand that computer memory ends. My patch allows to avoid this. Its main idea in that arrays with element one and same type and alike length has same type. IMHO this it is correct



_______________________________________________
cffi-devel mailing list
cffi-devel@common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel

Reply via email to