changelog shortlog graph tags branches changeset file revisions annotate raw help

Mercurial > core / lisp/std/alien.lisp

revision 657: 937a6f354047
parent 600: 93ea0386a0c8
child 658: 804b5ee20a46
     1.1--- a/lisp/std/alien.lisp	Tue Sep 17 22:19:19 2024 -0400
     1.2+++ b/lisp/std/alien.lisp	Wed Sep 18 21:48:06 2024 -0400
     1.3@@ -99,17 +99,26 @@
     1.4             (push c-string reversed-result)
     1.5             (return (nreverse reversed-result)))))))
     1.6 
     1.7-(defmacro clone-octets-to-alien (lispa aliena)
     1.8-  (with-gensyms (i)
     1.9-    `(loop for ,i from 0 below (length ,lispa)
    1.10-        do (setf (deref ,aliena ,i)
    1.11-                 (aref ,lispa ,i)))))
    1.12+(defun clone-octets-to-alien (lispa aliena)
    1.13+  (declare (optimize (speed 3)))
    1.14+  (loop for i from 0 below (length lispa)
    1.15+        do (setf (deref aliena i)
    1.16+                 (aref lispa i)))
    1.17+  aliena)
    1.18 
    1.19-(defmacro clone-octets-from-alien (aliena lispa len)
    1.20-  (with-gensyms (i)
    1.21-    `(loop for ,i from 0 below ,len
    1.22-           do (setf (aref ,lispa ,i)
    1.23-                 (deref ,aliena ,i)))))
    1.24+(defmacro octets-to-alien (lispa)
    1.25+  (with-gensyms (a)
    1.26+    `(with-alien ((,a (array (unsigned 8) ,(length lispa))))
    1.27+       (clone-octets-to-alien ,lispa ,a))))
    1.28+
    1.29+(defun clone-octets-from-alien (aliena lispa &optional len)
    1.30+  (declare (optimize (speed 3))
    1.31+           (array lispa))
    1.32+  (unless len (setf len (length lispa)))
    1.33+  (loop for i from 0 below len
    1.34+        do (setf (aref lispa i)
    1.35+                 (deref aliena i)))
    1.36+  lispa)
    1.37 
    1.38 (defun foreign-int-to-integer (buffer size)
    1.39   "Check SIZE of int BUFFER. return BUFFER."