remove dependency on aligned_storage and aligned_union to support older versions of GCC
This commit is contained in:
parent
8b98bf2c9d
commit
c15a575e34
|
@ -158,6 +158,8 @@ nobase_include_HEADERS = \
|
|||
span.hpp \
|
||||
\
|
||||
aux_/allocating_handler.hpp \
|
||||
aux_/aligned_storage.hpp \
|
||||
aux_/aligned_union.hpp \
|
||||
aux_/bind_to_device.hpp \
|
||||
aux_/block_cache_reference.hpp \
|
||||
aux_/cpuid.hpp \
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
|
||||
Copyright (c) 2017, Arvid Norberg
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the author nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef TORRENT_ALIGNED_STORAGE_HPP_INCLUDE
|
||||
#define TORRENT_ALIGNED_STORAGE_HPP_INCLUDE
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
namespace libtorrent { namespace aux {
|
||||
|
||||
#if defined __GNUC__ && __GNUC__ < 5
|
||||
|
||||
// this is for backwards compatibility with not-quite C++11 compilers
|
||||
template <size_t Len, size_t Align = alignof(void*)>
|
||||
struct aligned_storage
|
||||
{
|
||||
struct type
|
||||
{
|
||||
alignas(Align) char buffer[Len];
|
||||
};
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
using std::aligned_storage;
|
||||
|
||||
#endif
|
||||
|
||||
}}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
|
||||
Copyright (c) 2017, Arvid Norberg
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the author nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef TORRENT_ALIGNED_UNION_HPP_INCLUDE
|
||||
#define TORRENT_ALIGNED_UNION_HPP_INCLUDE
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
namespace libtorrent { namespace aux {
|
||||
|
||||
#if defined __GNUC__ && __GNUC__ < 5
|
||||
|
||||
constexpr std::size_t max(size_t a)
|
||||
{ return a; }
|
||||
|
||||
constexpr std::size_t max(size_t a, size_t b)
|
||||
{ return a > b ? a : b; }
|
||||
|
||||
template <typename... Vals>
|
||||
constexpr std::size_t max(size_t a, size_t b, Vals... v)
|
||||
{ return max(a, max(b, v...)); }
|
||||
|
||||
// this is for backwards compatibility with not-quite C++11 compilers
|
||||
template <size_t Len, typename... Types>
|
||||
struct aligned_union
|
||||
{
|
||||
struct type
|
||||
{
|
||||
alignas(max(alignof(Types)...))
|
||||
char buffer[max(Len, max(sizeof(Types)...))];
|
||||
};
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
using std::aligned_union;
|
||||
|
||||
#endif
|
||||
|
||||
}}
|
||||
|
||||
#endif
|
||||
|
|
@ -35,6 +35,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
#include "libtorrent/config.hpp"
|
||||
#include "libtorrent/error_code.hpp"
|
||||
#include "libtorrent/aux_/aligned_storage.hpp"
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
|
@ -54,10 +55,8 @@ namespace libtorrent { namespace aux
|
|||
{}
|
||||
|
||||
bool used;
|
||||
#else
|
||||
handler_storage() {}
|
||||
#endif
|
||||
typename std::aligned_storage<Size>::type bytes;
|
||||
typename aux::aligned_storage<Size>::type bytes;
|
||||
private:
|
||||
handler_storage(handler_storage const&);
|
||||
};
|
||||
|
|
|
@ -35,6 +35,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
#include "libtorrent/config.hpp"
|
||||
#include "libtorrent/aux_/block_cache_reference.hpp"
|
||||
#include "libtorrent/aux_/aligned_storage.hpp"
|
||||
#include "libtorrent/debug.hpp"
|
||||
#include "libtorrent/buffer.hpp"
|
||||
|
||||
|
@ -111,7 +112,7 @@ namespace libtorrent
|
|||
#if TORRENT_CPP98_DEQUE
|
||||
move_construct_holder_fun move_holder;
|
||||
#endif
|
||||
std::aligned_storage<24>::type holder;
|
||||
aux::aligned_storage<24>::type holder;
|
||||
char* buf; // the first byte of the buffer
|
||||
int size; // the total size of the buffer
|
||||
int used_size; // this is the number of bytes to send/receive
|
||||
|
|
|
@ -73,6 +73,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#include "libtorrent/error_code.hpp"
|
||||
#include "libtorrent/span.hpp"
|
||||
#include "libtorrent/string_view.hpp"
|
||||
#include "libtorrent/aux_/aligned_union.hpp"
|
||||
|
||||
namespace libtorrent
|
||||
{
|
||||
|
@ -311,7 +312,7 @@ namespace libtorrent
|
|||
|
||||
void to_string_impl(std::string& out, int indent) const;
|
||||
|
||||
std::aligned_union<1
|
||||
aux::aligned_union<1
|
||||
#if TORRENT_COMPLETE_TYPES_REQUIRED
|
||||
// for implementations that require complete types, use char and hope
|
||||
// for the best
|
||||
|
|
|
@ -33,9 +33,8 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#ifndef TORRENT_SOCKET_TYPE
|
||||
#define TORRENT_SOCKET_TYPE
|
||||
|
||||
#include <type_traits> // for aligned_union
|
||||
|
||||
#include "libtorrent/config.hpp"
|
||||
#include "libtorrent/aux_/aligned_union.hpp"
|
||||
#include "libtorrent/socket.hpp"
|
||||
#include "libtorrent/socks5_stream.hpp"
|
||||
#include "libtorrent/http_stream.hpp"
|
||||
|
@ -300,7 +299,7 @@ namespace libtorrent
|
|||
io_service& m_io_service;
|
||||
int m_type;
|
||||
|
||||
std::aligned_union<1
|
||||
aux::aligned_union<1
|
||||
, tcp::socket
|
||||
, socks5_stream
|
||||
, http_stream
|
||||
|
|
|
@ -46,7 +46,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <cstring> // for std::memset
|
||||
#endif
|
||||
|
||||
#if TORRENT_HAS_ARM
|
||||
#if TORRENT_HAS_ARM && TORRENT_HAS_ARM_NEON
|
||||
#include <sys/auxv.h>
|
||||
#endif
|
||||
|
||||
|
|
|
@ -48,6 +48,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <libtorrent/hasher.hpp>
|
||||
#include <libtorrent/session_settings.hpp> // for dht_settings
|
||||
#include <libtorrent/aux_/time.hpp> // for aux::time_now
|
||||
#include <libtorrent/aux_/aligned_union.hpp>
|
||||
|
||||
#include <type_traits>
|
||||
#include <functional>
|
||||
|
@ -135,7 +136,7 @@ void observer::set_id(node_id const& id)
|
|||
if (m_algorithm) m_algorithm->resort_results();
|
||||
}
|
||||
|
||||
using observer_storage = std::aligned_union<1
|
||||
using observer_storage = aux::aligned_union<1
|
||||
, find_data_observer
|
||||
, announce_observer
|
||||
, put_data_observer
|
||||
|
|
Loading…
Reference in New Issue