Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ByteBuffer.h"
- ByteBuffer::ByteBuffer(bool littleEndian) {
- setLittleEndian(littleEndian);
- }
- ByteBuffer::ByteBuffer(const char *data, size_t length) {
- for (size_t i = 0; length > i; i++) {
- vec.push_back(data[i]);
- }
- }
- ByteBuffer::ByteBuffer(const char *data, size_t length, bool littleEndian) {
- for (size_t i = 0; length > i; i++) {
- vec.push_back(data[i]);
- }
- setLittleEndian(littleEndian);
- }
- void ByteBuffer::setUint8(size_t index, uint8_t val) {
- if (vec.size() < (index + 1)) {
- vec.resize(vec.size() + (index + 1 - vec.size()));
- }
- vec[index] = val;
- }
- void ByteBuffer::putUint8(uint8_t val) {
- vec.push_back(val);
- }
- uint8_t ByteBuffer::getUint8() {
- return (uint8_t) vec[readIndex++];
- }
- uint8_t ByteBuffer::getUint8(size_t index) {
- readIndex = index;
- return (uint8_t) vec[readIndex++];
- }
- void ByteBuffer::setInt8(size_t index, int8_t val) {
- return setUint8(index, (uint8_t) val);
- }
- void ByteBuffer::putInt8(int8_t val) {
- vec.push_back(val);
- }
- int8_t ByteBuffer::getInt8() {
- return vec[readIndex++];
- }
- int8_t ByteBuffer::getInt8(size_t index) {
- readIndex = index;
- return vec[readIndex++];
- }
- void ByteBuffer::setUint16(size_t index, uint16_t val) {
- if (vec.size() < (index + 2)) {
- vec.resize(vec.size() + (index + 2 - vec.size()));
- }
- union {
- uint16_t value;
- char ch[2];
- };
- value = val;
- if (dontSwap) {
- vec[index++] = ch[0];
- vec[index] = ch[1];
- } else {
- vec[index++] = ch[1];
- vec[index] = ch[0];
- }
- }
- void ByteBuffer::putUint16(uint16_t val) {
- union {
- uint16_t value;
- char ch[2];
- };
- value = val;
- if (dontSwap) {
- vec.push_back(ch[0]);
- vec.push_back(ch[1]);
- } else {
- vec.push_back(ch[1]);
- vec.push_back(ch[0]);
- }
- }
- uint16_t ByteBuffer::getUint16() {
- union {
- uint16_t value;
- char ch[2];
- };
- if (dontSwap) {
- ch[0] = vec[readIndex++];
- ch[1] = vec[readIndex++];
- } else {
- ch[1] = vec[readIndex++];
- ch[0] = vec[readIndex++];
- }
- return value;
- }
- uint16_t ByteBuffer::getUint16(size_t index) {
- readIndex = index;
- return getUint16();
- }
- void ByteBuffer::setInt16(size_t index, int16_t val) {
- return setUint16(index, (uint16_t) val);
- }
- void ByteBuffer::putInt16(int16_t val) {
- return putUint16((uint16_t) val);
- }
- int16_t ByteBuffer::getInt16() {
- return getUint16();
- }
- int16_t ByteBuffer::getInt16(size_t index) {
- readIndex = index;
- return getUint16();
- }
- void ByteBuffer::setUint32(size_t index, uint32_t val) {
- if (vec.size() < (index + 4)) {
- vec.resize(vec.size() + (index + 4 - vec.size()));
- }
- union {
- uint32_t value;
- char ch[4];
- };
- value = val;
- if (dontSwap) {
- vec[index++] = ch[0];
- vec[index++] = ch[1];
- vec[index++] = ch[2];
- vec[index] = ch[3];
- } else {
- vec[index++] = ch[3];
- vec[index++] = ch[2];
- vec[index++] = ch[1];
- vec[index] = ch[0];
- }
- }
- void ByteBuffer::putUint32(uint32_t val) {
- union {
- uint32_t value;
- char ch[4];
- };
- value = val;
- if (dontSwap) {
- vec.push_back(ch[0]);
- vec.push_back(ch[1]);
- vec.push_back(ch[2]);
- vec.push_back(ch[3]);
- } else {
- vec.push_back(ch[3]);
- vec.push_back(ch[2]);
- vec.push_back(ch[1]);
- vec.push_back(ch[0]);
- }
- }
- uint32_t ByteBuffer::getUint32() {
- union {
- uint32_t value;
- char ch[4];
- };
- if (dontSwap) {
- ch[0] = vec[readIndex++];
- ch[1] = vec[readIndex++];
- ch[2] = vec[readIndex++];
- ch[3] = vec[readIndex++];
- } else {
- ch[3] = vec[readIndex++];
- ch[2] = vec[readIndex++];
- ch[1] = vec[readIndex++];
- ch[0] = vec[readIndex++];
- }
- return value;
- }
- uint32_t ByteBuffer::getUint32(size_t index) {
- readIndex = index;
- return getUint32();
- }
- void ByteBuffer::setInt32(size_t index, int32_t val) {
- return setUint32(index, (uint32_t) val);
- }
- void ByteBuffer::putInt32(int32_t val) {
- return putUint32((uint32_t) val);
- }
- int32_t ByteBuffer::getInt32() {
- return getUint32();
- }
- int32_t ByteBuffer::getInt32(size_t index) {
- readIndex = index;
- return getUint32();
- }
- void ByteBuffer::setFloat32(size_t index, float val) {
- if (vec.size() < (index + 4)) {
- vec.resize(vec.size() + (index + 4 - vec.size()));
- }
- union {
- float value;
- char ch[4];
- };
- value = val;
- if (dontSwap) {
- vec[index++] = ch[0];
- vec[index++] = ch[1];
- vec[index++] = ch[2];
- vec[index] = ch[3];
- } else {
- vec[index++] = ch[3];
- vec[index++] = ch[2];
- vec[index++] = ch[1];
- vec[index] = ch[0];
- }
- }
- void ByteBuffer::putFloat32(float val) {
- union {
- float value;
- char ch[4];
- };
- value = val;
- if (dontSwap) {
- vec.push_back(ch[0]);
- vec.push_back(ch[1]);
- vec.push_back(ch[2]);
- vec.push_back(ch[3]);
- } else {
- vec.push_back(ch[3]);
- vec.push_back(ch[2]);
- vec.push_back(ch[1]);
- vec.push_back(ch[0]);
- }
- }
- float ByteBuffer::getFloat32() {
- union {
- float value;
- char ch[4];
- };
- if (dontSwap) {
- ch[0] = vec[readIndex++];
- ch[1] = vec[readIndex++];
- ch[2] = vec[readIndex++];
- ch[3] = vec[readIndex++];
- } else {
- ch[3] = vec[readIndex++];
- ch[2] = vec[readIndex++];
- ch[1] = vec[readIndex++];
- ch[0] = vec[readIndex++];
- }
- return value;
- }
- float ByteBuffer::getFloat32(size_t index) {
- readIndex = index;
- return getFloat32();
- }
- void ByteBuffer::setFloat64(size_t index, double val) {
- if (vec.size() < (index + 8)) {
- vec.resize(vec.size() + (index + 8 - vec.size()));
- }
- union {
- double value;
- char ch[8];
- };
- value = val;
- if (dontSwap) {
- vec[index++] = ch[0];
- vec[index++] = ch[1];
- vec[index++] = ch[2];
- vec[index++] = ch[3];
- vec[index++] = ch[4];
- vec[index++] = ch[5];
- vec[index++] = ch[6];
- vec[index] = ch[7];
- } else {
- vec[index++] = ch[7];
- vec[index++] = ch[6];
- vec[index++] = ch[5];
- vec[index++] = ch[4];
- vec[index++] = ch[3];
- vec[index++] = ch[2];
- vec[index++] = ch[1];
- vec[index] = ch[0];
- }
- }
- void ByteBuffer::putFloat64(double val) {
- union {
- double value;
- char ch[8];
- };
- value = val;
- if (dontSwap) {
- vec.push_back(ch[0]);
- vec.push_back(ch[1]);
- vec.push_back(ch[2]);
- vec.push_back(ch[3]);
- vec.push_back(ch[4]);
- vec.push_back(ch[5]);
- vec.push_back(ch[6]);
- vec.push_back(ch[7]);
- } else {
- vec.push_back(ch[7]);
- vec.push_back(ch[6]);
- vec.push_back(ch[5]);
- vec.push_back(ch[4]);
- vec.push_back(ch[3]);
- vec.push_back(ch[2]);
- vec.push_back(ch[1]);
- vec.push_back(ch[0]);
- }
- }
- double ByteBuffer::getFloat64() {
- union {
- double value;
- char ch[8];
- };
- if (dontSwap) {
- ch[0] = vec[readIndex++];
- ch[1] = vec[readIndex++];
- ch[2] = vec[readIndex++];
- ch[3] = vec[readIndex++];
- ch[4] = vec[readIndex++];
- ch[5] = vec[readIndex++];
- ch[6] = vec[readIndex++];
- ch[7] = vec[readIndex++];
- } else {
- ch[7] = vec[readIndex++];
- ch[6] = vec[readIndex++];
- ch[5] = vec[readIndex++];
- ch[4] = vec[readIndex++];
- ch[3] = vec[readIndex++];
- ch[2] = vec[readIndex++];
- ch[1] = vec[readIndex++];
- ch[0] = vec[readIndex++];
- }
- return value;
- }
- double ByteBuffer::getFloat64(size_t index) {
- readIndex = index;
- return getFloat64();
- }
- void ByteBuffer::setUTF16(size_t index, std::u16string str) {
- if (vec.size() < (index + (2 * str.length()) + 1)) {
- vec.resize(vec.size() + (index + (2 * str.length()) + 1));
- }
- for (char16_t ch : str) {
- if (ch == 0) break;
- setUint16(index, ch);
- index += 2;
- }
- setUint16(index, 0);
- }
- void ByteBuffer::putUTF16(std::u16string str) {
- for (char16_t ch : str) {
- putUint16(ch);
- }
- putUint16(0);
- }
- std::u16string ByteBuffer::getUTF16() {
- std::u16string text = u"";
- while (readIndex < size()) {
- char16_t ch = getUint16();
- if (ch == 0) break;
- text += ch;
- }
- return text;
- }
- std::u16string ByteBuffer::getUTF16(size_t index) {
- readIndex = index;
- return getUTF16();
- }
- void ByteBuffer::setUTF8(size_t index, std::string str) {
- if (vec.size() < (index + (str.length()) + 1)) {
- vec.resize(vec.size() + (index + (str.length()) + 1));
- }
- for (char ch : str) {
- if (ch == 0) break;
- vec[index++] = ch;
- }
- vec[index] = 0;
- }
- void ByteBuffer::putUTF8(std::string str) {
- for (char ch : str) {
- vec.push_back(ch);
- }
- vec.push_back(0);
- }
- std::string ByteBuffer::getUTF8() {
- std::string text = "";
- while (readIndex < size()) {
- char ch = getUint8();
- if (ch == 0) break;
- text += ch;
- }
- return text;
- }
- std::string ByteBuffer::getUTF8(size_t index) {
- readIndex = index;
- return getUTF8();
- }
- void ByteBuffer::setLittleEndian(bool le) {
- #if __BYTE_ORDER == __LITTLE_ENDIAN
- dontSwap = le;
- #else
- dontSwap = !le;
- #endif
- }
- bool ByteBuffer::isLittleEndian() {
- #if __BYTE_ORDER == __LITTLE_ENDIAN
- return dontSwap;
- #else
- return !dontSwap;
- #endif
- }
- void ByteBuffer::erase(size_t index, size_t count) {
- vec.erase(vec.begin() + index, vec.begin() + index + count);
- }
- std::vector<char> ByteBuffer::getVector() {
- return vec;
- }
- char* ByteBuffer::getData() {
- return vec.data();
- }
- size_t ByteBuffer::size() {
- return vec.size();
- }
- std::string ByteBuffer::toString() {
- std::string str = "ByteBuffer[";
- for (size_t i = 0; i < (vec.size() - 1); i++) {
- str += std::to_string((unsigned char) vec[i]) + ", ";
- }
- str += std::to_string((unsigned char) vec[vec.size() - 1]) + "]";
- return str;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement