anchor.diff:        (setf (aref v i)
               (mem-aref pointer :double i)))
       v))
  +
  +(defun check-msg-header (msg)
  +  ;; todo
  +  )
   
   (defmacro def-msg-base (type)
     (let ((make-it (intern (concatenate 'string "MAKE-" (string type)))))
  
positive.code: (defmethod msg-decode ((type (eql 'msg-wt-tf)) pointer)
    (aa::make-quaternion-translation :quaternion
                                     (msg-decode 'quaternion
                                                 (foreign-slot-value pointer '(:struct wt-tf) 'r))
                                     :translation
                                     (msg-decode 'vec3
                                                 (foreign-slot-value pointer '(:struct wt-tf) 'x))))
  
negative.code:         (defmethod msg-aref-ptr ((msg ,type) i)
            (with-msg-pointer (pointer size) msg
              (check-var-msg size (foreign-type-size ',slot-type)
                             (foreign-slot-value pointer '(:struct msg-header) 'n) i)
              (let ((base (foreign-slot-pointer pointer '(:struct ,type) ',slot)))
                (mem-aptr base ',slot-type i))))
          (defmethod msg-aref ((msg ,type) i)
  