chiark / gitweb /
Small loop improvement
[clg] / glib / glib.lisp
index 149d392e82dfe0c687f057179d9cbf006356bf31..ae3cda83d83b0add3b3f0a0e46f19f3701b6b62f 100644 (file)
@@ -15,7 +15,7 @@
 ;; License along with this library; if not, write to the Free Software
 ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-;; $Id: glib.lisp,v 1.16 2004-11-06 21:39:58 espen Exp $
+;; $Id: glib.lisp,v 1.19 2004-11-12 13:27:41 espen Exp $
 
 
 (in-package "GLIB")
@@ -72,7 +72,6 @@ (defun destroy-user-data (id)
   (remhash id *user-data*))
 
 
-
 ;;;; Quarks
 
 (internal *quark-counter* *quark-from-object* *quark-to-object*)
@@ -197,7 +196,7 @@ (defmethod to-alien-form (list (type (eql 'glist)) &rest args)
     `(make-glist ',element-type ,list)))
 
 (defmethod to-alien-function ((type (eql 'glist)) &rest args)
-  (declare (ignore type args))
+  (declare (ignore type))
   (destructuring-bind (element-type) args    
     #'(lambda (list)
        (make-glist element-type list))))
@@ -277,7 +276,7 @@ (defmethod to-alien-form (list (type (eql 'gslist)) &rest args)
     `(make-sglist ',element-type ,list)))
 
 (defmethod to-alien-function ((type (eql 'gslist)) &rest args)
-  (declare (ignore type args))
+  (declare (ignore type))
   (destructuring-bind (element-type) args    
     #'(lambda (list)
        (make-gslist element-type list))))
@@ -314,11 +313,19 @@ (defun make-c-vector (type length &optional content location)
   (let* ((size-of-type (size-of type))
         (location (or location (allocate-memory (* size-of-type length))))
         (writer (writer-function type)))
-    (loop
-     for element across content
-     for i from 0 below length
-     as offset = 0 then (+ offset size-of-type)
-     do (funcall writer element location offset))
+    (etypecase content
+      (vector
+       (loop
+       for element across content
+       for i from 0 below length
+       as offset = 0 then (+ offset size-of-type)
+       do (funcall writer element location offset)))
+      (list
+       (loop
+       for element in content
+       for i from 0 below length
+       as offset = 0 then (+ offset size-of-type)
+       do (funcall writer element location offset))))
     location))