diff pytouhou/utils/vector.pyx @ 524:7f016dfbdfb1

Make vector a struct, allocate it directly on the stack, and thus pass it by copy, which is much less expensive than a python allocation.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Wed, 18 Dec 2013 18:15:40 +0100
parents cb5c68598ab0
children
line wrap: on
line diff
--- a/pytouhou/utils/vector.pyx
+++ b/pytouhou/utils/vector.pyx
@@ -13,23 +13,13 @@
 ##
 
 from libc.math cimport sqrt
-
-
-cdef class Vector:
-    def __init__(self, float x, float y, float z):
-        self.x = x
-        self.y = y
-        self.z = z
+cimport cython
 
 
-    cdef Vector sub(self, Vector other):
-        cdef float x, y, z
-
-        x = self.x - other.x
-        y = self.y - other.y
-        z = self.z - other.z
-
-        return Vector(x, y, z)
+cdef Vector sub(Vector vec1, Vector vec2):
+    return Vector(vec1.x - vec2.x,
+                  vec1.y - vec2.y,
+                  vec1.z - vec2.z)
 
 
 cdef Vector cross(Vector vec1, Vector vec2):
@@ -38,10 +28,11 @@ cdef Vector cross(Vector vec1, Vector ve
                   vec1.x * vec2.y - vec2.x * vec1.y)
 
 
-cdef float dot(Vector vec1, Vector vec2):
+cdef float dot(Vector vec1, Vector vec2) nogil:
     return vec1.x * vec2.x + vec2.y * vec1.y + vec1.z * vec2.z
 
 
+@cython.cdivision(True)
 cdef Vector normalize(Vector vec):
     cdef float normal