Browse Source

Use QVarLengthArray whenever applicable

adaptive-webui-19844
Chocobo1 3 years ago
parent
commit
cf96e6c642
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
  1. 18
      src/base/bittorrent/ltqbitarray.cpp

18
src/base/bittorrent/ltqbitarray.cpp

@ -28,11 +28,10 @@
#include "ltqbitarray.h" #include "ltqbitarray.h"
#include <memory>
#include <libtorrent/bitfield.hpp> #include <libtorrent/bitfield.hpp>
#include <QBitArray> #include <QBitArray>
#include <QVarLengthArray>
namespace namespace
{ {
@ -52,21 +51,10 @@ namespace BitTorrent::LT
const char *bitsData = bits.data(); const char *bitsData = bits.data();
const int dataLength = (bits.size() + 7) / 8; const int dataLength = (bits.size() + 7) / 8;
if (dataLength <= STACK_ALLOC_SIZE) QVarLengthArray<char, STACK_ALLOC_SIZE> tmp(dataLength);
{
// fast path for small bitfields
char tmp[STACK_ALLOC_SIZE]; // uninitialized for faster allocation
for (int i = 0; i < dataLength; ++i)
tmp[i] = reverseByte(bitsData[i]);
return QBitArray::fromBits(tmp, bits.size());
}
// slow path for big bitfields
auto tmp = std::make_unique<char []>(dataLength);
for (int i = 0; i < dataLength; ++i) for (int i = 0; i < dataLength; ++i)
tmp[i] = reverseByte(bitsData[i]); tmp[i] = reverseByte(bitsData[i]);
return QBitArray::fromBits(tmp.get(), bits.size()); return QBitArray::fromBits(tmp.data(), tmp.size());
} }
} }

Loading…
Cancel
Save