e00fdf473a
+ addressed every code safety demands compiler had in order to make it possible to build in release configuration without suppressing warning(warning C4244 still had to be suppressed because it was coming from external libraries xxhash and stb) + changed to proxying XInput9_1_0 instead of directx11 interface + recoded protocolbuffer helper + improved variable namings in fileshare - removed ida_defs.h header as its not needed anymore
74 lines
2.2 KiB
C++
74 lines
2.2 KiB
C++
#include <std_include.hpp>
|
|
#include "protobuf.hpp"
|
|
|
|
bool bdProtobufHelper::encodeVarInt(uint64_t value) {
|
|
char valuea[16];
|
|
size_t index = 0;
|
|
|
|
if (value) {
|
|
while (value >= 0x80 && index < 10) {
|
|
valuea[index++] = static_cast<char>(value | 0x80);
|
|
value >>= 7;
|
|
}
|
|
valuea[index++] = static_cast<char>(value);
|
|
}
|
|
else {
|
|
valuea[index++] = 0;
|
|
}
|
|
|
|
this->buffer.append(valuea, index);
|
|
this->length += index;
|
|
return true;
|
|
}
|
|
|
|
bool bdProtobufHelper::encodeVarInt(int64_t value) {
|
|
uint64_t encodedValue = 2 * static_cast<uint64_t>(value);
|
|
if (value < 0) {
|
|
encodedValue = ~encodedValue;
|
|
}
|
|
return encodeVarInt(encodedValue);
|
|
}
|
|
|
|
bool bdProtobufHelper::encodeString(const char* value, uint32_t len) {
|
|
bool result = encodeVarInt(static_cast<uint64_t>(len));
|
|
if (result) {
|
|
this->buffer.append(value, len);
|
|
this->length += len;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
bool bdProtobufHelper::encodeTag(uint32_t tagId, eWireType wireType) {
|
|
uint64_t tag = static_cast<int>(wireType) | (static_cast<uint64_t>(tagId) << 3);
|
|
return encodeVarInt(tag);
|
|
}
|
|
|
|
bool bdProtobufHelper::writeInt64(uint32_t tag, int64_t value) {
|
|
return encodeTag(tag, WIRETYPE_VARINT) && encodeVarInt(value);
|
|
}
|
|
|
|
bool bdProtobufHelper::writeUInt64(uint32_t tag, uint64_t value) {
|
|
return encodeTag(tag, WIRETYPE_VARINT) && encodeVarInt(value);
|
|
}
|
|
|
|
bool bdProtobufHelper::writeInt32(uint32_t tag, int32_t value) {
|
|
return encodeTag(tag, WIRETYPE_VARINT) && encodeVarInt(static_cast<int64_t>(value));
|
|
}
|
|
|
|
bool bdProtobufHelper::writeUInt32(uint32_t tag, uint32_t value) {
|
|
return encodeTag(tag, WIRETYPE_VARINT) && encodeVarInt(static_cast<uint64_t>(value));
|
|
}
|
|
|
|
bool bdProtobufHelper::writeString(uint32_t tag, const char* value, uint32_t size) {
|
|
uint32_t actualSize = size;
|
|
const void* nullPos = memchr(value, 0, size);
|
|
if (nullPos) {
|
|
actualSize = static_cast<uint32_t>(static_cast<const char*>(nullPos) - value);
|
|
}
|
|
return encodeTag(tag, WIRETYPE_STRING) && encodeString(value, actualSize);
|
|
}
|
|
|
|
bool bdProtobufHelper::writeBlob(uint32_t tag, void* data, uint32_t size) {
|
|
return encodeTag(tag, WIRETYPE_STRING) && encodeString(reinterpret_cast<const char*>(data), size);
|
|
}
|