Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.96 KB | None | 0 0
  1. from io import BytesIO
  2.  
  3. from ide.bitconv import *
  4.  
  5.  
  6. class BytesOutStream:
  7. def __init__(self, output = BytesIO()):
  8. self._data = output
  9.  
  10. def getvalue(self):
  11. return self._data.getvalue()
  12.  
  13. def close(self):
  14. self._data.close()
  15.  
  16. def flush(self):
  17. self._data.flush()
  18.  
  19. def seek(self, offset):
  20. self._data.seek(offset)
  21.  
  22. def tell(self):
  23. return self._data.tell()
  24.  
  25. def size(self):
  26. return len(self._data.getvalue())
  27.  
  28. def bytes(self, data):
  29. return self._data.write(data)
  30.  
  31. def uint(self, n: int, size_in_bytes: int):
  32. return self.bytes(pack_uint(n, size_in_bytes))
  33.  
  34. def int(self, n: int, size_in_bytes: int):
  35. return self.bytes(pack_int(n, size_in_bytes))
  36.  
  37. def uint8(self, n: int):
  38. return self.bytes(pack_uint8(n))
  39.  
  40. def int8(self, n: int):
  41. return self.bytes(pack_int8(n))
  42.  
  43. def uint16(self, n: int):
  44. return self.bytes(pack_uint16(n))
  45.  
  46. def int16(self, n: int):
  47. return self.bytes(pack_int16(n))
  48.  
  49. def uint32(self, n: int):
  50. return self.bytes(pack_uint32(n))
  51.  
  52. def int32(self, n: int):
  53. return self.bytes(pack_int32(n))
  54.  
  55. def uint64(self, n: int):
  56. return self.bytes(pack_uint64(n))
  57.  
  58. def int64(self, n: int):
  59. return self.bytes(pack_int64(n))
  60.  
  61. def float(self, n: float):
  62. return self.bytes(pack_float(n))
  63.  
  64. def double(self, n: float):
  65. return self.bytes(pack_double(n))
  66.  
  67. def uleb128(self, n: int):
  68. out = bytearray()
  69. while True:
  70. byte = n & 0x7f
  71. n >>= 7
  72. out.append(byte)
  73. if n:
  74. out[-1] |= 0x80
  75. else:
  76. break
  77.  
  78. return self.bytes(out)
  79.  
  80. def string(self, text: str, encoding = "utf-8"):
  81. data = bytes(text, encoding)
  82. self.uleb128(len(data))
  83. return self.bytes(data)
  84.  
  85.  
  86. class BytesInStream:
  87. def __init__(self, data):
  88. self._data = data
  89.  
  90. def close(self):
  91. self._data.close()
  92.  
  93. def flush(self):
  94. self._data.flush()
  95.  
  96. def seek(self, offset):
  97. self._data.seek(offset)
  98.  
  99. def tell(self):
  100. return self._data.tell()
  101.  
  102. def size(self):
  103. return len(self._data)
  104.  
  105. def bytes(self, length):
  106. return self._data.read(length)
  107.  
  108. def uint(self, size_in_bytes: int):
  109. return unpack_uint(self.bytes(size_in_bytes))
  110.  
  111. def int(self, size_in_bytes: int):
  112. return unpack_int(self.bytes(size_in_bytes))
  113.  
  114. def uint8(self):
  115. return unpack_uint8(self.bytes(1))
  116.  
  117. def int8(self):
  118. return unpack_int8(self.bytes(1))
  119.  
  120. def uint16(self):
  121. return unpack_uint16(self.bytes(2))
  122.  
  123. def int16(self):
  124. return unpack_int16(self.bytes(2))
  125.  
  126. def uint32(self):
  127. return unpack_uint32(self.bytes(4))
  128.  
  129. def int32(self):
  130. return unpack_int32(self.bytes(4))
  131.  
  132. def uint64(self):
  133. return unpack_uint64(self.bytes(8))
  134.  
  135. def int64(self):
  136. return unpack_int64(self.bytes(8))
  137.  
  138. def float(self):
  139. return unpack_float(self.bytes(4))
  140.  
  141. def double(self):
  142. return unpack_double(self.bytes(8))
  143.  
  144. def uleb128(self):
  145. value = 0
  146. shift = 0
  147. while not self.size() > self.tell():
  148. byte = self.bytes(1)[0]
  149. value |= (byte & 0x7f) << shift
  150. if byte & 0x80:
  151. shift += 7
  152. else:
  153. break
  154.  
  155. return value
  156.  
  157. def string(self, encoding = "utf-8"):
  158. length = self.uleb128()
  159. return self.bytes(length).decode(encoding)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement