bufferhelper.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. package util
  2. import (
  3. "bufio"
  4. "bytes"
  5. "encoding/binary"
  6. "math"
  7. )
  8. func readBool(r *bytes.Buffer, data *bool) error {
  9. b, err := r.ReadByte()
  10. if err != nil {
  11. return err
  12. }
  13. *data = b != 0
  14. return nil
  15. }
  16. func readInt8(r *bytes.Buffer, data *int8) error {
  17. b, err := r.ReadByte()
  18. if err != nil {
  19. return err
  20. }
  21. *data = int8(b)
  22. return nil
  23. }
  24. func readUint8(r *bytes.Buffer, data *uint8) error {
  25. b, err := r.ReadByte()
  26. if err != nil {
  27. return err
  28. }
  29. *data = uint8(b)
  30. return nil
  31. }
  32. func readInt16(r *bytes.Buffer, data *int16) error {
  33. order := binary.LittleEndian
  34. var b [2]byte
  35. bs := b[:]
  36. _, err := r.Read(bs)
  37. if err != nil {
  38. return err
  39. }
  40. *data = int16(order.Uint16(bs))
  41. return nil
  42. }
  43. func readUint16(r *bytes.Buffer, data *uint16) error {
  44. order := binary.LittleEndian
  45. var b [2]byte
  46. bs := b[:]
  47. _, err := r.Read(bs)
  48. if err != nil {
  49. return err
  50. }
  51. *data = order.Uint16(bs)
  52. return nil
  53. }
  54. func readInt(r *bytes.Buffer, data *int) error {
  55. order := binary.LittleEndian
  56. var b [4]byte
  57. bs := b[:]
  58. _, err := r.Read(bs)
  59. if err != nil {
  60. return err
  61. }
  62. *data = int(order.Uint32(bs))
  63. return nil
  64. }
  65. func readInt32(r *bytes.Buffer, data *int32) error {
  66. order := binary.LittleEndian
  67. var b [4]byte
  68. bs := b[:]
  69. _, err := r.Read(bs)
  70. if err != nil {
  71. return err
  72. }
  73. *data = int32(order.Uint32(bs))
  74. return nil
  75. }
  76. func readUint(r *bytes.Buffer, data *uint) error {
  77. order := binary.LittleEndian
  78. var b [4]byte
  79. bs := b[:]
  80. _, err := r.Read(bs)
  81. if err != nil {
  82. return err
  83. }
  84. *data = uint(order.Uint32(bs))
  85. return nil
  86. }
  87. func readUint32(r *bytes.Buffer, data *uint32) error {
  88. order := binary.LittleEndian
  89. var b [4]byte
  90. bs := b[:]
  91. _, err := r.Read(bs)
  92. if err != nil {
  93. return err
  94. }
  95. *data = order.Uint32(bs)
  96. return nil
  97. }
  98. func readInt64(r *bytes.Buffer, data *int64) error {
  99. order := binary.LittleEndian
  100. var b [8]byte
  101. bs := b[:]
  102. _, err := r.Read(bs)
  103. if err != nil {
  104. return err
  105. }
  106. *data = int64(order.Uint64(bs))
  107. return nil
  108. }
  109. func readUint64(r *bytes.Buffer, data *uint64) error {
  110. order := binary.LittleEndian
  111. var b [8]byte
  112. bs := b[:]
  113. _, err := r.Read(bs)
  114. if err != nil {
  115. return err
  116. }
  117. *data = order.Uint64(bs)
  118. return nil
  119. }
  120. func readFloat32(r *bytes.Buffer, data *float32) error {
  121. order := binary.LittleEndian
  122. var b [4]byte
  123. bs := b[:]
  124. _, err := r.Read(bs)
  125. if err != nil {
  126. return err
  127. }
  128. *data = math.Float32frombits(order.Uint32(bs))
  129. return nil
  130. }
  131. func readFloat64(r *bytes.Buffer, data *float64) error {
  132. order := binary.LittleEndian
  133. var b [8]byte
  134. bs := b[:]
  135. _, err := r.Read(bs)
  136. if err != nil {
  137. return err
  138. }
  139. *data = math.Float64frombits(order.Uint64(bs))
  140. return nil
  141. }
  142. func readBuffBool(r *bufio.Reader, data *bool) error {
  143. b, err := r.ReadByte()
  144. if err != nil {
  145. return err
  146. }
  147. *data = b != 0
  148. return nil
  149. }
  150. func readBuffInt8(r *bufio.Reader, data *int8) error {
  151. b, err := r.ReadByte()
  152. if err != nil {
  153. return err
  154. }
  155. *data = int8(b)
  156. return nil
  157. }
  158. func readBuffUint8(r *bufio.Reader, data *uint8) error {
  159. b, err := r.ReadByte()
  160. if err != nil {
  161. return err
  162. }
  163. *data = uint8(b)
  164. return nil
  165. }
  166. func readBuffInt16(r *bufio.Reader, data *int16) error {
  167. order := binary.LittleEndian
  168. var b [2]byte
  169. bs := b[:]
  170. _, err := r.Read(bs)
  171. if err != nil {
  172. return err
  173. }
  174. *data = int16(order.Uint16(bs))
  175. return nil
  176. }
  177. func readBuffUint16(r *bufio.Reader, data *uint16) error {
  178. order := binary.LittleEndian
  179. var b [2]byte
  180. bs := b[:]
  181. _, err := r.Read(bs)
  182. if err != nil {
  183. return err
  184. }
  185. *data = order.Uint16(bs)
  186. return nil
  187. }
  188. func readBuffInt(r *bufio.Reader, data *int) error {
  189. order := binary.LittleEndian
  190. var b [4]byte
  191. bs := b[:]
  192. _, err := r.Read(bs)
  193. if err != nil {
  194. return err
  195. }
  196. *data = int(order.Uint32(bs))
  197. return nil
  198. }
  199. func readBuffInt32(r *bufio.Reader, data *int32) error {
  200. order := binary.LittleEndian
  201. var b [4]byte
  202. bs := b[:]
  203. _, err := r.Read(bs)
  204. if err != nil {
  205. return err
  206. }
  207. *data = int32(order.Uint32(bs))
  208. return nil
  209. }
  210. func readBuffUint(r *bufio.Reader, data *uint) error {
  211. order := binary.LittleEndian
  212. var b [4]byte
  213. bs := b[:]
  214. _, err := r.Read(bs)
  215. if err != nil {
  216. return err
  217. }
  218. *data = uint(order.Uint32(bs))
  219. return nil
  220. }
  221. func readBuffUint32(r *bufio.Reader, data *uint32) error {
  222. order := binary.LittleEndian
  223. var b [4]byte
  224. bs := b[:]
  225. _, err := r.Read(bs)
  226. if err != nil {
  227. return err
  228. }
  229. *data = order.Uint32(bs)
  230. return nil
  231. }
  232. func readBuffInt64(r *bufio.Reader, data *int64) error {
  233. order := binary.LittleEndian
  234. var b [8]byte
  235. bs := b[:]
  236. _, err := r.Read(bs)
  237. if err != nil {
  238. return err
  239. }
  240. *data = int64(order.Uint64(bs))
  241. return nil
  242. }
  243. func readBuffUint64(r *bufio.Reader, data *uint64) error {
  244. order := binary.LittleEndian
  245. var b [8]byte
  246. bs := b[:]
  247. _, err := r.Read(bs)
  248. if err != nil {
  249. return err
  250. }
  251. *data = order.Uint64(bs)
  252. return nil
  253. }
  254. func readBuffFloat32(r *bufio.Reader, data *float32) error {
  255. order := binary.LittleEndian
  256. var b [4]byte
  257. bs := b[:]
  258. _, err := r.Read(bs)
  259. if err != nil {
  260. return err
  261. }
  262. *data = math.Float32frombits(order.Uint32(bs))
  263. return nil
  264. }
  265. func readBuffFloat64(r *bufio.Reader, data *float64) error {
  266. order := binary.LittleEndian
  267. var b [8]byte
  268. bs := b[:]
  269. _, err := r.Read(bs)
  270. if err != nil {
  271. return err
  272. }
  273. *data = math.Float64frombits(order.Uint64(bs))
  274. return nil
  275. }
  276. func writeBool(w *bytes.Buffer, data bool) error {
  277. if data {
  278. w.WriteByte(1)
  279. return nil
  280. }
  281. w.WriteByte(0)
  282. return nil
  283. }
  284. func writeInt8(w *bytes.Buffer, data int8) error {
  285. w.WriteByte(byte(data))
  286. return nil
  287. }
  288. func writeUint8(w *bytes.Buffer, data uint8) error {
  289. w.WriteByte(byte(data))
  290. return nil
  291. }
  292. func writeInt16(w *bytes.Buffer, data int16) error {
  293. var b [2]byte
  294. bs := b[:]
  295. binary.LittleEndian.PutUint16(bs, uint16(data))
  296. _, err := w.Write(bs)
  297. return err
  298. }
  299. func writeUint16(w *bytes.Buffer, data uint16) error {
  300. var b [2]byte
  301. bs := b[:]
  302. binary.LittleEndian.PutUint16(bs, data)
  303. _, err := w.Write(bs)
  304. return err
  305. }
  306. func writeInt32(w *bytes.Buffer, data int32) error {
  307. var b [4]byte
  308. bs := b[:]
  309. binary.LittleEndian.PutUint32(bs, uint32(data))
  310. _, err := w.Write(bs)
  311. return err
  312. }
  313. func writeUint32(w *bytes.Buffer, data uint32) error {
  314. var b [4]byte
  315. bs := b[:]
  316. binary.LittleEndian.PutUint32(bs, data)
  317. _, err := w.Write(bs)
  318. return err
  319. }
  320. func writeInt(w *bytes.Buffer, data int) error {
  321. var b [4]byte
  322. bs := b[:]
  323. binary.LittleEndian.PutUint32(bs, uint32(data))
  324. _, err := w.Write(bs)
  325. return err
  326. }
  327. func writeUint(w *bytes.Buffer, data uint) error {
  328. var b [4]byte
  329. bs := b[:]
  330. binary.LittleEndian.PutUint32(bs, uint32(data))
  331. _, err := w.Write(bs)
  332. return err
  333. }
  334. func writeInt64(w *bytes.Buffer, data int64) error {
  335. var b [8]byte
  336. bs := b[:]
  337. binary.LittleEndian.PutUint64(bs, uint64(data))
  338. _, err := w.Write(bs)
  339. return err
  340. }
  341. func writeUint64(w *bytes.Buffer, data uint64) error {
  342. var b [8]byte
  343. bs := b[:]
  344. binary.LittleEndian.PutUint64(bs, data)
  345. _, err := w.Write(bs)
  346. return err
  347. }
  348. func writeFloat32(w *bytes.Buffer, data float32) error {
  349. var b [4]byte
  350. bs := b[:]
  351. binary.LittleEndian.PutUint32(bs, math.Float32bits(data))
  352. _, err := w.Write(bs)
  353. return err
  354. }
  355. func writeFloat64(w *bytes.Buffer, data float64) error {
  356. var b [8]byte
  357. bs := b[:]
  358. binary.LittleEndian.PutUint64(bs, math.Float64bits(data))
  359. _, err := w.Write(bs)
  360. return err
  361. }