# HG changeset patch # User Steve Losh # Date 1471695439 0 # Node ID a5b56cd9bbcf2837ee76383e0445e455d214a3fc # Parent ae02fff6fa6552dd40e1a2bf9ae1b3bf1f315e1f vec-set! diff -r ae02fff6fa65 -r a5b56cd9bbcf src/vectors.lisp --- a/src/vectors.lisp Thu Aug 18 22:15:06 2016 +0000 +++ b/src/vectors.lisp Sat Aug 20 12:17:19 2016 +0000 @@ -73,9 +73,13 @@ (defmacro defvec2ops (vec-type element-type) (let ((add (symbolize vec-type '-add)) + (add* (symbolize vec-type '-add*)) (add! (symbolize vec-type '-add!)) + (add*! (symbolize vec-type '-add*!)) (sub (symbolize vec-type '-sub)) + (sub* (symbolize vec-type '-sub*)) (sub! (symbolize vec-type '-sub!)) + (sub*! (symbolize vec-type '-sub*!)) (mul (symbolize vec-type '-mul)) (mul! (symbolize vec-type '-mul!)) (div (symbolize vec-type '-div)) @@ -85,7 +89,8 @@ (magnitude (symbolize vec-type '-magnitude)) (length (symbolize vec-type '-length)) (angle (symbolize vec-type '-angle)) - (direction (symbolize vec-type '-direction))) + (direction (symbolize vec-type '-direction)) + (set! (symbolize vec-type '-set!))) `(progn (declaim (ftype (function (,element-type ,element-type) @@ -100,6 +105,10 @@ (values ,vec-type &optional)) ,add ,sub ,add! ,sub!) + (ftype (function (,vec-type ,element-type ,element-type) + (values ,vec-type &optional)) + ,add* ,add*! ,sub* ,sub*! ,set!) + (ftype (function (,vec-type ,element-type) (values ,vec-type &optional)) ,mul ,div ,mul! ,div!) @@ -113,6 +122,11 @@ (with-fns ,vec-type ,element-type + (defun ,set! (v x y) + (setf (vec-x v) x + (vec-y v) y) + v) + (defun ,magdir (magnitude direction) ;; todo figure this out for integer vectors (vec @@ -127,29 +141,44 @@ (= (vec-y v1) (vec-y v2))))) (defun ,add (v1 v2) - (vec - (wrap (+ (vec-x v1) (vec-x v2))) - (wrap (+ (vec-y v1) (vec-y v2))))) + (vec (wrap (+ (vec-x v1) (vec-x v2))) + (wrap (+ (vec-y v1) (vec-y v2))))) + + (defun ,add* (v x y) + (vec (wrap (+ (vec-x v) x)) + (wrap (+ (vec-y v) y)))) (defun ,add! (v1 v2) (setf (vec-x v1) (wrap (+ (vec-x v1) (vec-x v2))) (vec-y v1) (wrap (+ (vec-y v1) (vec-y v2)))) v1) + (defun ,add*! (v x y) + (setf (vec-x v) (wrap (+ (vec-x v) x)) + (vec-y v) (wrap (+ (vec-y v) y))) + v) + (defun ,sub (v1 v2) - (vec - (wrap (- (vec-x v1) (vec-x v2))) - (wrap (- (vec-y v1) (vec-y v2))))) + (vec (wrap (- (vec-x v1) (vec-x v2))) + (wrap (- (vec-y v1) (vec-y v2))))) + + (defun ,sub* (v x y) + (vec (wrap (- (vec-x v) x)) + (wrap (- (vec-y v) y)))) (defun ,sub! (v1 v2) (setf (vec-x v1) (wrap (- (vec-x v1) (vec-x v2))) (vec-y v1) (wrap (- (vec-y v1) (vec-y v2)))) v1) + (defun ,sub*! (v x y) + (setf (vec-x v) (wrap (- (vec-x v) x)) + (vec-y v) (wrap (- (vec-y v) y))) + v) + (defun ,mul (v scalar) - (vec - (wrap (* (vec-x v) scalar)) - (wrap (* (vec-y v) scalar)))) + (vec (wrap (* (vec-x v) scalar)) + (wrap (* (vec-y v) scalar)))) (defun ,mul! (v scalar) (setf (vec-x v) (wrap (* (vec-x v) scalar)) @@ -157,9 +186,8 @@ v) (defun ,div (v scalar) - (vec - (wrap (// (vec-x v) scalar)) - (wrap (// (vec-y v) scalar)))) + (vec (wrap (// (vec-x v) scalar)) + (wrap (// (vec-y v) scalar)))) (defun ,div! (v scalar) (setf (vec-x v) (wrap (// (vec-x v) scalar)) @@ -179,9 +207,14 @@ (defvec2ops vec2d double-float) (defvec2ops vec2i fixnum) -; (declaim (optimize (speed 3) (safety 1) (debug 0))) +(declaim (optimize (speed 3) (safety 1) (debug 0))) ; vec2i-eql ; vec2f-add +; vec2f-add* +; vec2f-add! +; vec2f-add*! +; vec2f-set! +; vec2f-sub*! ; vec2f-add! ; vec2f-sub! ; vec2f-mul!