PikaStdData_ByteArray.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "PikaStdData_ByteArray.h"
  2. void PikaStdData_ByteArray___init__(PikaObj* self, Arg* bytes) {
  3. obj_setArg(self, "raw", bytes);
  4. }
  5. Arg* PikaStdData_ByteArray___iter__(PikaObj* self) {
  6. obj_setInt(self, "__iter_i", 0);
  7. return arg_newRef(self);
  8. }
  9. Arg* PikaStdData_ByteArray___next__(PikaObj* self) {
  10. int __iter_i = args_getInt(self->list, "__iter_i");
  11. uint8_t* data = obj_getBytes(self, "raw");
  12. uint16_t len = obj_getBytesSize(self, "raw");
  13. Arg* res = NULL;
  14. char char_buff[] = " ";
  15. if (__iter_i < len) {
  16. char_buff[0] = data[__iter_i];
  17. res = arg_newInt(char_buff[0]);
  18. } else {
  19. return arg_newNull();
  20. }
  21. args_setInt(self->list, "__iter_i", __iter_i + 1);
  22. return res;
  23. }
  24. int PikaStdData_ByteArray___getitem__(PikaObj* self, int __key) {
  25. uint8_t* data = obj_getBytes(self, "raw");
  26. uint16_t len = obj_getBytesSize(self, "raw");
  27. if (__key < len) {
  28. return data[__key];
  29. } else {
  30. return 0;
  31. }
  32. }
  33. void PikaStdData_ByteArray___setitem__(PikaObj* self, int __key, int __val) {
  34. uint8_t* data = obj_getBytes(self, "raw");
  35. uint16_t len = obj_getBytesSize(self, "raw");
  36. if (__key < len) {
  37. data[__key] = __val;
  38. }
  39. }
  40. char* PikaStdData_ByteArray___str__(PikaObj* self) {
  41. uint8_t* data = obj_getBytes(self, "raw");
  42. uint16_t len = obj_getBytesSize(self, "raw");
  43. Arg* str_arg = arg_newStr("");
  44. str_arg = arg_strAppend(str_arg, "bytearray(b'");
  45. for (int i = 0; i < len; i++) {
  46. char u8_str[] = "\\x00";
  47. uint8_t u8 = data[i];
  48. __platform_sprintf(u8_str, "\\x%02x", u8);
  49. str_arg = arg_strAppend(str_arg, u8_str);
  50. }
  51. str_arg = arg_strAppend(str_arg, "')");
  52. obj_removeArg(self, "_buf");
  53. obj_setStr(self, "_buf", arg_getStr(str_arg));
  54. arg_deinit(str_arg);
  55. return obj_getStr(self, "_buf");
  56. }
  57. char* PikaStdData_ByteArray_decode(PikaObj* self) {
  58. uint8_t* data = obj_getBytes(self, "raw");
  59. Arg* str_arg = arg_newStr((char*)data);
  60. obj_removeArg(self, "_buf");
  61. obj_setStr(self, "_buf", arg_getStr(str_arg));
  62. arg_deinit(str_arg);
  63. return obj_getStr(self, "_buf");
  64. }