80_c.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import c
  2. array = c.malloc(c.sizeof("int") * 10)
  3. for i in range(10):
  4. off = c.sizeof("int") * i
  5. (array+off).write_int(i)
  6. x = c.int_(0)
  7. for i in range(10):
  8. off = c.sizeof("int") * i
  9. i = (array+off).read_int()
  10. x.write_int(x.read_int() + i)
  11. assert x.read_int() == (0+9)*10//2
  12. c.memset(array, 0, c.sizeof("int") * 10)
  13. for i in range(10):
  14. off = c.sizeof("int") * i
  15. assert (array+off).read_char() == 0
  16. array2 = c.malloc(c.sizeof("int") * 10)
  17. c.memcpy(array2, array, c.sizeof("int") * 10)
  18. for i in range(10):
  19. off = c.sizeof("int") * i
  20. assert (array+off).read_char() == 0
  21. c.free(array)
  22. c.free(array2)
  23. class Vec2(c.struct):
  24. def __new__(cls, x: float, y: float):
  25. obj = c.struct.__new__(cls, 8)
  26. obj.write_float(x, 0)
  27. obj.write_float(y, 4)
  28. return obj
  29. @property
  30. def x(self) -> float:
  31. return self.read_float(0)
  32. @property
  33. def y(self) -> float:
  34. return self.read_float(4)
  35. def __repr__(self) -> str:
  36. return f"Vec2({self.x}, {self.y})"
  37. a = Vec2(1, 2)
  38. assert isinstance(a, c.struct)
  39. assert type(a) is Vec2
  40. assert repr(a) == "Vec2(1.0, 2.0)"