123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- /*
- * This is the source code of tgnet library v. 1.1
- * It is licensed under GNU GPL v. 2 or later.
- * You should have received a copy of the license in this archive (see LICENSE).
- *
- * Copyright Nikolai Kudashov, 2015-2018.
- */
- #ifndef NATIVEBYTEBUFFER_H
- #define NATIVEBYTEBUFFER_H
- #include <stdint.h>
- #include <string>
- #ifdef ANDROID
- #include <jni.h>
- #endif
- class ByteArray;
- class NativeByteBuffer {
- public:
- NativeByteBuffer(uint32_t size);
- NativeByteBuffer(bool calculate);
- NativeByteBuffer(uint8_t *buff, uint32_t length);
- ~NativeByteBuffer();
- uint32_t position();
- void position(uint32_t position);
- uint32_t limit();
- void limit(uint32_t limit);
- uint32_t capacity();
- uint32_t remaining();
- bool hasRemaining();
- void rewind();
- void compact();
- void flip();
- void clear();
- void skip(uint32_t length);
- void clearCapacity();
- uint8_t *bytes();
- void writeInt32(int32_t x, bool *error);
- void writeInt64(int64_t x, bool *error);
- void writeBool(bool value, bool *error);
- void writeBytes(uint8_t *b, uint32_t length, bool *error);
- void writeBytes(uint8_t *b, uint32_t offset, uint32_t length, bool *error);
- void writeBytes(ByteArray *b, bool *error);
- void writeBytes(NativeByteBuffer *b, bool *error);
- void writeByte(uint8_t i, bool *error);
- void writeString(std::string s, bool *error);
- void writeByteArray(uint8_t *b, uint32_t offset, uint32_t length, bool *error);
- void writeByteArray(uint8_t *b, uint32_t length, bool *error);
- void writeByteArray(NativeByteBuffer *b, bool *error);
- void writeByteArray(ByteArray *b, bool *error);
- void writeDouble(double d, bool *error);
- void writeInt32(int32_t x);
- void writeInt64(int64_t x);
- void writeBool(bool value);
- void writeBytes(uint8_t *b, uint32_t length);
- void writeBytes(uint8_t *b, uint32_t offset, uint32_t length);
- void writeBytes(ByteArray *b);
- void writeBytes(NativeByteBuffer *b);
- void writeByte(uint8_t i);
- void writeString(std::string s);
- void writeByteArray(uint8_t *b, uint32_t offset, uint32_t length);
- void writeByteArray(uint8_t *b, uint32_t length);
- void writeByteArray(NativeByteBuffer *b);
- void writeByteArray(ByteArray *b);
- void writeDouble(double d);
- uint32_t readUint32(bool *error);
- uint64_t readUint64(bool *error);
- int32_t readInt32(bool *error);
- int32_t readBigInt32(bool *error);
- int64_t readInt64(bool *error);
- uint8_t readByte(bool *error);
- bool readBool(bool *error);
- void readBytes(uint8_t *b, uint32_t length, bool *error);
- ByteArray *readBytes(uint32_t length, bool *error);
- std::string readString(bool *error);
- ByteArray *readByteArray(bool *error);
- NativeByteBuffer *readByteBuffer(bool copy, bool *error);
- double readDouble(bool *error);
- void reuse();
- #ifdef ANDROID
- jobject getJavaByteBuffer();
- #endif
- private:
- void writeBytesInternal(uint8_t *b, uint32_t offset, uint32_t length);
- uint8_t *buffer = nullptr;
- bool calculateSizeOnly = false;
- bool sliced = false;
- uint32_t _position = 0;
- uint32_t _limit = 0;
- uint32_t _capacity = 0;
- bool bufferOwner = true;
- #ifdef ANDROID
- jobject javaByteBuffer = nullptr;
- #endif
- };
- #endif
|