NativeByteBuffer.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /*
  2. * This is the source code of tgnet library v. 1.1
  3. * It is licensed under GNU GPL v. 2 or later.
  4. * You should have received a copy of the license in this archive (see LICENSE).
  5. *
  6. * Copyright Nikolai Kudashov, 2015-2018.
  7. */
  8. #ifndef NATIVEBYTEBUFFER_H
  9. #define NATIVEBYTEBUFFER_H
  10. #include <stdint.h>
  11. #include <string>
  12. #ifdef ANDROID
  13. #include <jni.h>
  14. #endif
  15. class ByteArray;
  16. class NativeByteBuffer {
  17. public:
  18. NativeByteBuffer(uint32_t size);
  19. NativeByteBuffer(bool calculate);
  20. NativeByteBuffer(uint8_t *buff, uint32_t length);
  21. ~NativeByteBuffer();
  22. uint32_t position();
  23. void position(uint32_t position);
  24. uint32_t limit();
  25. void limit(uint32_t limit);
  26. uint32_t capacity();
  27. uint32_t remaining();
  28. bool hasRemaining();
  29. void rewind();
  30. void compact();
  31. void flip();
  32. void clear();
  33. void skip(uint32_t length);
  34. void clearCapacity();
  35. uint8_t *bytes();
  36. void writeInt32(int32_t x, bool *error);
  37. void writeInt64(int64_t x, bool *error);
  38. void writeBool(bool value, bool *error);
  39. void writeBytes(uint8_t *b, uint32_t length, bool *error);
  40. void writeBytes(uint8_t *b, uint32_t offset, uint32_t length, bool *error);
  41. void writeBytes(ByteArray *b, bool *error);
  42. void writeBytes(NativeByteBuffer *b, bool *error);
  43. void writeByte(uint8_t i, bool *error);
  44. void writeString(std::string s, bool *error);
  45. void writeByteArray(uint8_t *b, uint32_t offset, uint32_t length, bool *error);
  46. void writeByteArray(uint8_t *b, uint32_t length, bool *error);
  47. void writeByteArray(NativeByteBuffer *b, bool *error);
  48. void writeByteArray(ByteArray *b, bool *error);
  49. void writeDouble(double d, bool *error);
  50. void writeInt32(int32_t x);
  51. void writeInt64(int64_t x);
  52. void writeBool(bool value);
  53. void writeBytes(uint8_t *b, uint32_t length);
  54. void writeBytes(uint8_t *b, uint32_t offset, uint32_t length);
  55. void writeBytes(ByteArray *b);
  56. void writeBytes(NativeByteBuffer *b);
  57. void writeByte(uint8_t i);
  58. void writeString(std::string s);
  59. void writeByteArray(uint8_t *b, uint32_t offset, uint32_t length);
  60. void writeByteArray(uint8_t *b, uint32_t length);
  61. void writeByteArray(NativeByteBuffer *b);
  62. void writeByteArray(ByteArray *b);
  63. void writeDouble(double d);
  64. uint32_t readUint32(bool *error);
  65. uint64_t readUint64(bool *error);
  66. int32_t readInt32(bool *error);
  67. int32_t readBigInt32(bool *error);
  68. int64_t readInt64(bool *error);
  69. uint8_t readByte(bool *error);
  70. bool readBool(bool *error);
  71. void readBytes(uint8_t *b, uint32_t length, bool *error);
  72. ByteArray *readBytes(uint32_t length, bool *error);
  73. std::string readString(bool *error);
  74. ByteArray *readByteArray(bool *error);
  75. NativeByteBuffer *readByteBuffer(bool copy, bool *error);
  76. double readDouble(bool *error);
  77. void reuse();
  78. #ifdef ANDROID
  79. jobject getJavaByteBuffer();
  80. #endif
  81. private:
  82. void writeBytesInternal(uint8_t *b, uint32_t offset, uint32_t length);
  83. uint8_t *buffer = nullptr;
  84. bool calculateSizeOnly = false;
  85. bool sliced = false;
  86. uint32_t _position = 0;
  87. uint32_t _limit = 0;
  88. uint32_t _capacity = 0;
  89. bool bufferOwner = true;
  90. #ifdef ANDROID
  91. jobject javaByteBuffer = nullptr;
  92. #endif
  93. };
  94. #endif