refactor: remove tr_removeElementFromArray() (#3731)

This commit is contained in:
Charles Kerr 2022-08-28 21:51:26 -05:00 committed by GitHub
parent 0360cfbf72
commit cee339e10d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 20 additions and 64 deletions

View File

@ -13,6 +13,7 @@
#include <map>
#include <memory> // std::unique_ptr
#include <optional>
#include <queue>
#include <utility>
#include <vector>
@ -832,8 +833,7 @@ public:
std::vector<tr_pex> pex;
std::vector<tr_pex> pex6;
std::array<int, MetadataReqQ> peerAskedForMetadata = {};
int peerAskedForMetadataCount = 0;
std::queue<int> peerAskedForMetadata;
time_t clientSentAnythingAt = 0;
@ -1087,18 +1087,16 @@ static void sendInterest(tr_peerMsgsImpl* msgs, bool b)
msgs->dbgOutMessageLen();
}
static bool popNextMetadataRequest(tr_peerMsgsImpl* msgs, int* piece)
static bool popNextMetadataRequest(tr_peerMsgsImpl* msgs, int* setme)
{
if (msgs->peerAskedForMetadataCount == 0)
if (std::empty(msgs->peerAskedForMetadata))
{
return false;
}
*piece = msgs->peerAskedForMetadata[0];
tr_removeElementFromArray(std::data(msgs->peerAskedForMetadata), 0, sizeof(int), msgs->peerAskedForMetadataCount);
--msgs->peerAskedForMetadataCount;
auto& reqs = msgs->peerAskedForMetadata;
*setme = reqs.front();
reqs.pop();
return true;
}
@ -1376,9 +1374,9 @@ static void parseUtMetadata(tr_peerMsgsImpl* msgs, uint32_t msglen, struct evbuf
if (msg_type == MetadataMsgType::Request)
{
if (piece >= 0 && msgs->torrent->hasMetainfo() && msgs->torrent->isPublic() &&
msgs->peerAskedForMetadataCount < MetadataReqQ)
std::size(msgs->peerAskedForMetadata) < MetadataReqQ)
{
msgs->peerAskedForMetadata[msgs->peerAskedForMetadataCount++] = piece;
msgs->peerAskedForMetadata.push(piece);
}
else
{

View File

@ -306,20 +306,6 @@ double tr_getRatio(uint64_t numerator, uint64_t denominator)
****
***/
void tr_removeElementFromArray(void* array, size_t index_to_remove, size_t sizeof_element, size_t nmemb)
{
auto* a = static_cast<char*>(array);
memmove(
a + sizeof_element * index_to_remove,
a + sizeof_element * (index_to_remove + 1),
sizeof_element * (--nmemb - index_to_remove));
}
/***
****
***/
namespace
{
namespace tr_strvUtf8Clean_impl

View File

@ -261,9 +261,6 @@ size_t tr_strvToBuf(std::string_view src, char* buf, size_t buflen);
*/
bool tr_moveFile(std::string_view oldpath, std::string_view newpath, struct tr_error** error = nullptr);
/** @brief convenience function to remove an item from an array */
void tr_removeElementFromArray(void* array, size_t index_to_remove, size_t sizeof_element, size_t nmemb);
/***
****
***/

View File

@ -191,15 +191,20 @@ tr_variant* tr_variantListChild(tr_variant* list, size_t pos)
bool tr_variantListRemove(tr_variant* list, size_t pos)
{
if (tr_variantIsList(list) && pos < list->val.l.count)
if (!tr_variantIsList(list) && pos < list->val.l.count)
{
tr_variantClear(&list->val.l.vals[pos]);
tr_removeElementFromArray(list->val.l.vals, pos, sizeof(tr_variant), list->val.l.count);
--list->val.l.count;
return true;
return false;
}
return false;
auto& vals = list->val.l.vals;
auto& count = list->val.l.count;
tr_variantClear(&vals[pos]);
std::move(vals + pos + 1, vals + count, vals + pos);
--count;
vals[count] = {};
return true;
}
bool tr_variantGetInt(tr_variant const* v, int64_t* setme)

View File

@ -203,36 +203,6 @@ TEST_F(UtilsTest, trStrlower)
EXPECT_EQ("hello"sv, tr_strlower("hello"sv));
}
TEST_F(UtilsTest, array)
{
auto array = std::array<size_t, 10>{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
auto n = array.size();
tr_removeElementFromArray(array.data(), 5U, sizeof(size_t), n);
--n;
for (size_t i = 0; i < n; ++i)
{
EXPECT_EQ(array[i], i < 5 ? i : i + 1);
}
tr_removeElementFromArray(array.data(), 0U, sizeof(size_t), n);
--n;
for (size_t i = 0; i < n; ++i)
{
EXPECT_EQ(array[i], i < 4 ? i + 1 : i + 2);
}
tr_removeElementFromArray(array.data(), n - 1, sizeof(size_t), n);
--n;
for (size_t i = 0; i < n; ++i)
{
EXPECT_EQ(array[i], i < 4 ? i + 1 : i + 2);
}
}
TEST_F(UtilsTest, truncd)
{
EXPECT_EQ("100.00%"sv, fmt::format("{:.2f}%", 99.999));