def f(points, result_point, n): i = 0 while i < n: myjitdriver.jit_merge_point(i=i, points=points, n=n, result_point=result_point) x = array_getitem( types.slong, rffi.sizeof(lltype.Signed) * 2, points, i, 0 ) y = array_getitem( types.slong, rffi.sizeof(lltype.Signed) * 2, points, i, rffi.sizeof(lltype.Signed) ) cur_x = array_getitem( types.slong, rffi.sizeof(lltype.Signed) * 2, result_point, 0, 0 ) cur_y = array_getitem( types.slong, rffi.sizeof(lltype.Signed) * 2, result_point, 0, rffi.sizeof(lltype.Signed) ) array_setitem( types.slong, rffi.sizeof(lltype.Signed) * 2, result_point, 0, 0, cur_x + x ) array_setitem( types.slong, rffi.sizeof(lltype.Signed) * 2, result_point, 0, rffi.sizeof(lltype.Signed), cur_y + y ) i += 1
def _write(self, storage, width, i, offset, value): #value = byteswap(value) XXX if we_are_translated(): libffi.array_setitem(clibffi.cast_type_to_ffitype(self.T), width, storage, i, offset, value) else: libffi.array_setitem_T(self.T, width, storage, i, offset, value)
def f(points, result_point, n): i = 0 while i < n: myjitdriver.jit_merge_point(i=i, points=points, n=n, result_point=result_point) x = array_getitem(types.slong, rffi.sizeof(lltype.Signed) * 2, points, i, 0) y = array_getitem(types.slong, rffi.sizeof(lltype.Signed) * 2, points, i, rffi.sizeof(lltype.Signed)) cur_x = array_getitem(types.slong, rffi.sizeof(lltype.Signed) * 2, result_point, 0, 0) cur_y = array_getitem(types.slong, rffi.sizeof(lltype.Signed) * 2, result_point, 0, rffi.sizeof(lltype.Signed)) array_setitem(types.slong, rffi.sizeof(lltype.Signed) * 2, result_point, 0, 0, cur_x + x) array_setitem(types.slong, rffi.sizeof(lltype.Signed) * 2, result_point, 0, rffi.sizeof(lltype.Signed), cur_y + y) i += 1
def test_array_fields(self): POINT = lltype.Struct("POINT", ("x", lltype.Float), ("y", lltype.Float), ) points = lltype.malloc(rffi.CArray(POINT), 2, flavor="raw") points[0].x = 1.0 points[0].y = 2.0 points[1].x = 3.0 points[1].y = 4.0 points = rffi.cast(rffi.CArrayPtr(lltype.Char), points) assert array_getitem(types.double, 16, points, 0, 0) == 1.0 assert array_getitem(types.double, 16, points, 0, 8) == 2.0 assert array_getitem(types.double, 16, points, 1, 0) == 3.0 assert array_getitem(types.double, 16, points, 1, 8) == 4.0 # array_setitem(types.double, 16, points, 0, 0, 10.0) array_setitem(types.double, 16, points, 0, 8, 20.0) array_setitem(types.double, 16, points, 1, 0, 30.0) array_setitem(types.double, 16, points, 1, 8, 40.0) # assert array_getitem(types.double, 16, points, 0, 0) == 10.0 assert array_getitem(types.double, 16, points, 0, 8) == 20.0 assert array_getitem(types.double, 16, points, 1, 0) == 30.0 assert array_getitem(types.double, 16, points, 1, 8) == 40.0 # lltype.free(points, flavor="raw")
def test_array_fields(self): POINT = lltype.Struct( "POINT", ("x", lltype.Float), ("y", lltype.Float), ) points = lltype.malloc(rffi.CArray(POINT), 2, flavor="raw") points[0].x = 1.0 points[0].y = 2.0 points[1].x = 3.0 points[1].y = 4.0 points = rffi.cast(rffi.CArrayPtr(lltype.Char), points) assert array_getitem(types.double, 16, points, 0, 0) == 1.0 assert array_getitem(types.double, 16, points, 0, 8) == 2.0 assert array_getitem(types.double, 16, points, 1, 0) == 3.0 assert array_getitem(types.double, 16, points, 1, 8) == 4.0 # array_setitem(types.double, 16, points, 0, 0, 10.0) array_setitem(types.double, 16, points, 0, 8, 20.0) array_setitem(types.double, 16, points, 1, 0, 30.0) array_setitem(types.double, 16, points, 1, 8, 40.0) # assert array_getitem(types.double, 16, points, 0, 0) == 10.0 assert array_getitem(types.double, 16, points, 0, 8) == 20.0 assert array_getitem(types.double, 16, points, 1, 0) == 30.0 assert array_getitem(types.double, 16, points, 1, 8) == 40.0 # lltype.free(points, flavor="raw")
def fill(self, storage, width, box, start, stop, offset): value = self.unbox(box) for i in xrange(start, stop): libffi.array_setitem(clibffi.cast_type_to_ffitype(self.T), width, storage, i, offset, value )
def store(self, storage, width, i, offset, box): value = self.unbox(box) libffi.array_setitem(clibffi.cast_type_to_ffitype(self.T), width, storage, i, offset, value )
def fill(self, storage, width, box, start, stop, offset): value = self.unbox(box) for i in xrange(start, stop): libffi.array_setitem(clibffi.cast_type_to_ffitype(self.T), width, storage, i, offset, value)
def store(self, storage, width, i, offset, box): value = self.unbox(box) libffi.array_setitem(clibffi.cast_type_to_ffitype(self.T), width, storage, i, offset, value)