Loading...
--- dyld/dyld-1162/lsl/PVLEInt64.cpp
+++ dyld/dyld-1335/lsl/PVLEInt64.cpp
@@ -47,32 +47,27 @@
std::copy(&valueBytes[0], &valueBytes[bytes], std::back_inserter(data));
}
-uint64_t readPVLEUInt64(std::span<std::byte>& data) {
- uint64_t result = 0;
- contract(data.size() != 0);
- const uint8_t additionalByteCount = std::countr_zero((uint8_t)data[0]);
+bool readPVLEUInt64(std::span<std::byte>& data, uint64_t& result) {
+ result = 0;
+ if (data.size() == 0) {
+ return false;
+ }
+ const uint8_t additionalByteCount = std::countr_zero((uint8_t)data[0]);
+ if (data.size() < additionalByteCount+1) {
+ return false;
+ }
if (additionalByteCount == 8) {
- std::copy(&data[1], &data[9], (std::byte*)&result);
+ std::copy(data.begin()+1, data.begin()+9, (std::byte*)&result);
data = data.last(data.size()-9);
- return result;
+ return true;
}
- contract(data.size() >= 1+additionalByteCount);
const uint8_t extraBitCount = 8 - (additionalByteCount+1);
const uint8_t extraBits = (((uint8_t)(data[0]))>>(additionalByteCount+1)) & ((1<<extraBitCount)-1);
- std::copy(&data[1], &data[additionalByteCount+1], (std::byte*)&result);
+ std::copy(data.begin()+1, data.begin()+additionalByteCount+1, (std::byte*)&result);
result <<= extraBitCount;
result |= extraBits;
data = data.last(data.size()-(additionalByteCount+1));
- return result;
-}
-
-void emitPVLEInt64(int64_t value, Vector<std::byte>& data) {
- emitPVLEUInt64((value >> 63) ^ (value << 1), data);
-}
-
-int64_t readPVLEInt64(std::span<std::byte>& data) {
- uint64_t value = readPVLEUInt64(data);
- return ((value & 1) ? (value >> 1) ^ -1 : (value >> 1));
+ return true;
}
};