Luís Oliveira wrote:
Леонид Новиков ln@bk.ru 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