mirror of
https://github.com/transmission/transmission
synced 2025-01-30 10:52:00 +00:00
refactor: add libsmall dependency (#5649)
* refactor: add small dependency * refactor: use small in variant.cc * refactor: use small in cache.h
This commit is contained in:
parent
548f840b8d
commit
432fc9bafc
9 changed files with 64 additions and 44 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -47,3 +47,6 @@
|
||||||
[submodule "third-party/wide-integer"]
|
[submodule "third-party/wide-integer"]
|
||||||
path = third-party/wide-integer
|
path = third-party/wide-integer
|
||||||
url = https://github.com/transmission/wide-integer
|
url = https://github.com/transmission/wide-integer
|
||||||
|
[submodule "third-party/small"]
|
||||||
|
path = third-party/small
|
||||||
|
url = https://github.com/transmission/small.git
|
||||||
|
|
|
@ -204,11 +204,12 @@ if(WIN32)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CMAKE_FOLDER "third-party")
|
set(CMAKE_FOLDER "third-party")
|
||||||
|
|
||||||
find_package(Fmt)
|
|
||||||
find_package(WideInteger)
|
|
||||||
find_package(FastFloat)
|
find_package(FastFloat)
|
||||||
|
find_package(Fmt)
|
||||||
|
find_package(Small)
|
||||||
find_package(UtfCpp)
|
find_package(UtfCpp)
|
||||||
|
find_package(WideInteger)
|
||||||
|
|
||||||
find_package(Threads)
|
find_package(Threads)
|
||||||
find_package(PkgConfig QUIET)
|
find_package(PkgConfig QUIET)
|
||||||
|
|
||||||
|
|
|
@ -3753,6 +3753,7 @@
|
||||||
"third-party/dht",
|
"third-party/dht",
|
||||||
"third-party/fast_float/include",
|
"third-party/fast_float/include",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/jsonsl",
|
"third-party/jsonsl",
|
||||||
"third-party/libb64/include",
|
"third-party/libb64/include",
|
||||||
"third-party/libdeflate",
|
"third-party/libdeflate",
|
||||||
|
@ -3798,6 +3799,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
);
|
);
|
||||||
WRAPPER_EXTENSION = app;
|
WRAPPER_EXTENSION = app;
|
||||||
};
|
};
|
||||||
|
@ -3819,6 +3821,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -3844,6 +3847,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -3865,6 +3869,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4007,6 +4012,7 @@
|
||||||
"third-party/dht",
|
"third-party/dht",
|
||||||
"third-party/fast_float/include",
|
"third-party/fast_float/include",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/jsonsl",
|
"third-party/jsonsl",
|
||||||
"third-party/libb64/include",
|
"third-party/libb64/include",
|
||||||
"third-party/libdeflate",
|
"third-party/libdeflate",
|
||||||
|
@ -4042,6 +4048,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4073,6 +4080,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
);
|
);
|
||||||
WRAPPER_EXTENSION = app;
|
WRAPPER_EXTENSION = app;
|
||||||
};
|
};
|
||||||
|
@ -4274,6 +4282,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
);
|
);
|
||||||
WRAPPER_EXTENSION = app;
|
WRAPPER_EXTENSION = app;
|
||||||
};
|
};
|
||||||
|
@ -4295,6 +4304,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4333,6 +4343,7 @@
|
||||||
"third-party/dht",
|
"third-party/dht",
|
||||||
"third-party/fast_float/include",
|
"third-party/fast_float/include",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/jsonsl",
|
"third-party/jsonsl",
|
||||||
"third-party/libb64/include",
|
"third-party/libb64/include",
|
||||||
"third-party/libdeflate",
|
"third-party/libdeflate",
|
||||||
|
@ -4372,6 +4383,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4393,6 +4405,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4472,6 +4485,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
);
|
);
|
||||||
WRAPPER_EXTENSION = qlgenerator;
|
WRAPPER_EXTENSION = qlgenerator;
|
||||||
};
|
};
|
||||||
|
@ -4501,6 +4515,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
);
|
);
|
||||||
WRAPPER_EXTENSION = qlgenerator;
|
WRAPPER_EXTENSION = qlgenerator;
|
||||||
};
|
};
|
||||||
|
@ -4530,6 +4545,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
);
|
);
|
||||||
WRAPPER_EXTENSION = qlgenerator;
|
WRAPPER_EXTENSION = qlgenerator;
|
||||||
};
|
};
|
||||||
|
@ -4599,6 +4615,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4620,6 +4637,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4812,6 +4830,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4833,6 +4852,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4854,6 +4874,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4875,6 +4896,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4896,6 +4918,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4917,6 +4940,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4938,6 +4962,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4959,6 +4984,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -4980,6 +5006,7 @@
|
||||||
SYSTEM_HEADER_SEARCH_PATHS = (
|
SYSTEM_HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"third-party/fmt/include",
|
"third-party/fmt/include",
|
||||||
|
"third-party/small/include",
|
||||||
"third-party/libevent/include",
|
"third-party/libevent/include",
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
11
cmake/FindSmall.cmake
Normal file
11
cmake/FindSmall.cmake
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
add_library(small::small INTERFACE IMPORTED)
|
||||||
|
|
||||||
|
target_include_directories(small::small
|
||||||
|
INTERFACE
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../third-party/small/include)
|
||||||
|
|
||||||
|
|
||||||
|
target_compile_definitions(fmt::fmt-header-only
|
||||||
|
INTERFACE
|
||||||
|
SMALL_DISABLE_EXCEPTIONS=1)
|
||||||
|
|
|
@ -297,6 +297,7 @@ target_link_libraries(${TR_NAME}
|
||||||
"$<$<BOOL:${APPLE}>:-framework Foundation>"
|
"$<$<BOOL:${APPLE}>:-framework Foundation>"
|
||||||
PUBLIC
|
PUBLIC
|
||||||
fmt::fmt-header-only
|
fmt::fmt-header-only
|
||||||
|
small::small
|
||||||
libevent::event)
|
libevent::event)
|
||||||
|
|
||||||
if(INSTALL_LIB)
|
if(INSTALL_LIB)
|
||||||
|
|
|
@ -9,13 +9,15 @@
|
||||||
#error only libtransmission should #include this header.
|
#error only libtransmission should #include this header.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <cstdint> // for size_t
|
#include <cstddef> // for size_t
|
||||||
#include <cstdint> // for intX_t, uintX_t
|
#include <cstdint> // for intX_t, uintX_t
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
#include <memory> // for std::unique_ptr
|
#include <memory> // for std::unique_ptr
|
||||||
#include <utility> // for std::pair
|
#include <utility> // for std::pair
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include <small/vector.hpp>
|
||||||
|
|
||||||
#include "transmission.h"
|
#include "transmission.h"
|
||||||
|
|
||||||
#include "block-info.h"
|
#include "block-info.h"
|
||||||
|
@ -26,43 +28,7 @@ struct tr_torrent;
|
||||||
class Cache
|
class Cache
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
class BlockData
|
using BlockData = small::max_size_vector<uint8_t, tr_block_info::BlockSize>;
|
||||||
{
|
|
||||||
public:
|
|
||||||
BlockData(size_t size)
|
|
||||||
: size_{ size }
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] constexpr auto size() const noexcept
|
|
||||||
{
|
|
||||||
return size_;
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] constexpr auto* data() noexcept
|
|
||||||
{
|
|
||||||
return std::data(data_);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] constexpr const auto* data() const noexcept
|
|
||||||
{
|
|
||||||
return std::data(data_);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] constexpr auto* begin() const noexcept
|
|
||||||
{
|
|
||||||
return data();
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] constexpr auto* end() const noexcept
|
|
||||||
{
|
|
||||||
return begin() + size();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::array<uint8_t, tr_block_info::BlockSize> data_;
|
|
||||||
size_t const size_;
|
|
||||||
};
|
|
||||||
|
|
||||||
Cache(tr_torrents& torrents, int64_t max_bytes);
|
Cache(tr_torrents& torrents, int64_t max_bytes);
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,9 @@
|
||||||
#include <process.h> /* _beginthreadex(), _endthreadex() */
|
#include <process.h> /* _beginthreadex(), _endthreadex() */
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <shlobj.h> /* SHGetKnownFolderPath(), FOLDERID_... */
|
#include <shlobj.h> /* SHGetKnownFolderPath(), FOLDERID_... */
|
||||||
|
#ifdef small // workaround name collision between libsmall and rpcndr.h
|
||||||
|
#undef small
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <unistd.h> /* getuid() */
|
#include <unistd.h> /* getuid() */
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
|
|
||||||
#include <fmt/core.h>
|
#include <fmt/core.h>
|
||||||
|
|
||||||
|
#include <small/vector.hpp>
|
||||||
|
|
||||||
#define LIBTRANSMISSION_VARIANT_MODULE
|
#define LIBTRANSMISSION_VARIANT_MODULE
|
||||||
|
|
||||||
#include "libtransmission/transmission.h"
|
#include "libtransmission/transmission.h"
|
||||||
|
@ -640,6 +642,8 @@ bool tr_variantDictRemove(tr_variant* dict, tr_quark key)
|
||||||
class WalkNode
|
class WalkNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
WalkNode() = default;
|
||||||
|
|
||||||
explicit WalkNode(tr_variant const* v_in)
|
explicit WalkNode(tr_variant const* v_in)
|
||||||
{
|
{
|
||||||
assign(v_in);
|
assign(v_in);
|
||||||
|
@ -683,7 +687,8 @@ protected:
|
||||||
size_t idx = {};
|
size_t idx = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
void sort(std::vector<ByKey>& sortbuf)
|
template<typename Container>
|
||||||
|
void sort(Container& sortbuf)
|
||||||
{
|
{
|
||||||
if (!tr_variantIsDict(&v))
|
if (!tr_variantIsDict(&v))
|
||||||
{
|
{
|
||||||
|
@ -763,8 +768,10 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
std::vector<WalkNode> stack;
|
|
||||||
std::vector<WalkNode::ByKey> sortbuf;
|
static auto constexpr InitialCapacity = size_t{ 32U };
|
||||||
|
small::vector<WalkNode, InitialCapacity> stack;
|
||||||
|
small::vector<WalkNode::ByKey, InitialCapacity> sortbuf;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
1
third-party/small
vendored
Submodule
1
third-party/small
vendored
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 027f6d7eb61c4a5c7eb699acb7c59b8a5e3d085e
|
Loading…
Reference in a new issue